HTML内のJavaScriptに値を安全に埋め込む際のフィルタモジュー JavaScript::Value::Escape がVersion 0.04になってます。ちょっと時間が経っているけど紹介

まず、0.04でgfx氏によりドキュメントが増えたり修正されました。感謝感謝です。あと、javascriptvalueescape っていう関数名が長いので、jsという名前でもExportすることができるようになっています

use JavaScript::Value::Escape qw/js/;

です。テンプレートエンジンに組み込む際にはこっちの名前にしたほうがわかりやすいとは思いますが、直接jsをテンプレートエンジンに設定するより、escape_html と組み合わせて関数を自前で用意するのが個人的にお勧め。

もう一つが動作の変更で、Version 0.01 でよりもEscape対象となる文字が増えています。Version 0.04 では、q!”!、q!’!、q!&!、q!=!、q!-!、q!+!、q!;!、q!!,、q!/!、q!! 、と\x{2028}(LINE SEPARATOR)、\x{2029}(PARAGRAPH SEPARATOR)、さらにアスキーの制御文字、\x00-\x1f、\x7fがEscapeの対象となりました。\x{2028}、\x{2029}を扱うので、Perlのテキスト文字列を利用するのが推奨です。ただしバイナリ文字列でもエラーにはなりません。

エスケープする文字にはおそらくエスケープする必要のない文字が含まれていますが、これはDjangoのテンプレートエンジンにあわせた物となっています。

JavaScript::Value::EscapeをPerlテキスト文字列で利用すればおそらく安全にHTML内のJavaScriptに値を埋め込むことができると思いますが、それ以降の処理でXSSを起こさないようJavaScriptのコードとテキストの内容に気を使う必要があるのは変わっていませんのでご注意ください。

このブログ記事について

このページは、Masahiro Naganoが2010年11月30日 00:13に書いたブログ記事です。

ひとつ前のブログ記事は「CloudForecastに複数サーバ一括表示とデータ取得状態の確認機能付きました」です。

次のブログ記事は「LIKE節におけるエスケープ文字とDBIx::PrintfもしくはDBIx::Printf::Named」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja