- ベストアンサー
クロスサイトスクリプティングの対策について
まだあまり知識がありませんが、仕事でWebサーバ(ホームページ)の管理をしています。 最近、ホームページ内に掲示板を設けたのですが、クロスサイトスクリプティング対策が必要であると 同僚に言われました。 検索で出てきたページを見るとperlプログラム(.prlファイル?)内を書き換えるような事が 書かれていますが、どの部分をどう修正すれば良いか分かりません。 検索したページで修正するように書かれていたものが、掲示板で使用しているファイルを見ると、 perlプログラム(.prlファイル?)ではなくcgiプログラム(.cgiファイル)を修正するようにも思えるのですが、 どうなのでしょうか。 お分かりになる方いらっしゃいましたら、宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> cgiファイルを見てみましたら、 > デコード処理の欄の中に > ----------------------------------------- > # タグ処理 > $value =~ s/&/&/g; > $value =~ s/</</g; > $value =~ s/>/>/g; > $value =~ s/"/"/g; > ----------------------------------------- > という記述があったのですが、これで対策はされてい > るという事なのでしょうか。 そうです。それで大丈夫ですよ(^-^)
その他の回答 (2)
#1 kusukusuさんがわかりやすく説明していますので、だぶってしまいますが、 @ITでXSSについてイメージ付きでわかりやすく説明されています。 http://www.atmarkit.co.jp/fsecurity/special/31xss/xss01.html で、IPAのホームページにかなり有効なサニタイジング手法がのっています。 たぶんこれでほぼ完全に防げるのではないかと...。 http://www.ipa.go.jp/security/awareness/vendor/programming/a01_02_main.html 参考になれば幸いです。
お礼
ありがとうございます。 参考になりました。
- kusukusu
- ベストアンサー率38% (141/363)
> クロスサイトスクリプティング対策が必要であると 同僚に言われました。 必要です。 > どの部分をどう修正すれば良いか分かりません。 perlでhtmlを出力する際、危険な文字列を排除するように変更すればいいのです。 もっと具体的に言えば、クロスサイドスクリプティングとは「外部から送られてきたスクリプトを実行してしまう」事です。 #ちょっと乱暴な言い方ですが、簡単に言えばそう言うことです。 つまり、外部から送られてきたスクリプト(もちろん悪意あるスクリプト)を無効にするようにすればいいのです。 では、実際はどうするのか? これは「サニタイジング」と言うキーワードで検索してみてください。 多分山ほど出てきます。 すご~く簡単に言うと「タグを無効にする」と言うことです。 と言うのも、危険な文字列というのは <script> <form action"htt://www.aaaaaa.com/cgi-bin/cross.cgi" metod="get> 等のタグで記述されます。つまりこれらの文字列を無効化するプログラムを用意すればいいのです。 誰かが掲示板に、 <a href="http://aaaaaa.com/cgi-bin/corss.cgi">来てね♪</a>等書き込んだとします。 通常はこれをテキストファイルや、DBなんかに保存しておいて、誰かが掲示板を開けばhtmlに出力すますが、この出力する際に、サニタイジングを行います。 例えば、掲示板の本文を $mesと言う変数に保存しておいたとすると、これを出力する前に、 $msg=~s/</</g; $msg=~s/>/>/g; 等で、タグを無効化にしてやればいいのです。 その他、危険な文字列としては 「&」、「"」、「'」等もありますので、これらも無効化しましょう。 度々使うのであれば関数化しておいた方が便利ですね。 以上です。
お礼
ご回答ありがとうございます。 perlやcgiについての知識が全然ないもので、kusukusu様の回答を読ませて頂いても、 どのファイルのどの部分を変更したらいいか分からない状態です…。 掲示板自体も自作のものではなく、フリーのものを使用しているのですが、 cgiファイルを見てみましたら、 デコード処理の欄の中に ----------------------------------------- # タグ処理 $value =~ s/&/&/g; $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/"/"/g; ----------------------------------------- という記述があったのですが、これで対策はされているという事なのでしょうか。
お礼
「'」の置換処理の記述だけなかったので、 $value =~ s/'/'/g; の記述を追加しました。 ありがとうございました。