• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javascriptが特注文字解釈の対策)

Javascript特殊文字解釈の対策について

このQ&Aのポイント
  • Javascriptの特殊文字解釈による問題とその対策について検討しています。特にXSS脆弱性につながる可能性があるため、十分な対策が必要です。
  • Javascriptで変数を引数に渡す際の注意点や問題点を調査しています。特に特殊文字が解釈されてしまうことやXSS脆弱性につながる可能性があることに関心を持っています。
  • Javascriptの引数に特殊文字を含む変数を渡す場合、そのままではうまく機能しないだけでなく、XSS脆弱性のリスクもあります。対策方法を探していますが、情報が限られているようです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>やはり、javascriptの引数に入れる際に、こういったものは変換(\'などに)ではなく、削除してしまうのがベストということでしょうか。 $valueが、商品IDなどのように決まった文字(A-Za-z0-9など無害なやつ)しか含まれないケースでは、サーバサイドで入力チェックを行ない、それ以外の文字以外が含まれている場合はエラーとします。 このような場合、素直に<html><body>エラー</body></html>みたいな画面を返してしまうのがよいと思います。まずいやり方は、危険な文字のみを削除してHTML(onclick)の中に埋め込む、という方法です。以下のように、属性値内のシングルクォートの表現には色んなものがあるため、大抵削除の漏れが出ます。 ’ &#39; &#000000039; &#x27; &#X0027; (大文字のX) &#00039 (;が無いパターン) &●#●3●9●; (●はNUL文字、多分IEのみ) <全部全角で書いてます> $valueに、様々な文字が入ることを正常系として想定しなければならないケースでは、以下のような方法を取ることがあります。 echo '<input type="hidden" name="foo" value="'. htmlspecialchars($value). '">'; echo '<img src="http://.." onclick="myfunc(document.forms[x].foo.value)" />';

SHlVA
質問者

お礼

回答いただきありがとうございます。 読み返すと、自分で書いた特殊文字が普通に ' で表示されてしまい、どれも同じに見えてしまっていますね。すみませんでした。 なるほど、 ' でもいろんなパターンがあるんですね。 対応は一筋縄ではいかないようですね。 最後に教えていただいた、直でスクリプトに書き出すのではなく、ワンクッションおくのがよさそうですね。 ちょうど考えていたのが、 a のリンクでしたので、 this.innerHTML や this.href などで取得できそうです。 とても勉強になりました。 ありがとうございました。

関連するQ&A