はあなたのコードが何をするかについて考えてみてください。実際には、それについて考えないでください。ブラウザに表示されているページのソースコードを開きます。値hello
セッション属性を含むと仮定すると、あなたのコードは
<script type="text/javascript">
var test = hello;
document.write (test);
</script>
だから値がJavaScript変数として解釈されますが生成されます。また、
hello
という変数を定義していない可能性が最も高いので、結果は
undefined
となります。しかし
あなたが今だけ引用符を追加した場合:
var test = "<%= session.getAttribute("mySessionVar") %>";
値は、ユーザーから来ているので、あなたが言うように、それはないだけ含めることができます自分自身を引用しているので、あなたはまだ、安全ではないでしょうが、より多くのJavaScriptコードまたはHTMLコード。
(!開始時に引用符に注意してください)ユーザーが"; while(1) {alert('This site is crap!')};</script><h1>This site is crap!</h1>
に入る想像
含むソースコードを導く:
<script type="text/javascript">
var test = ""; while(1) {alert('This site is crap!')};</script><h1>This site is crap!</h1>
そして今、あなたのサイトだけでなく、このサイトはがらくたです」と表示されます! "大きな文字で表示されますが、警告ボックスの無限ループでユーザーをロックします。正しくエスケープされていないWeb開発、NEVER EVER出力は何も(特にないユーザー入力)で
ナンバー1つのルール(それはCross-Site Scriptingと呼ばれています)。 JavaScriptの場合はStringEscapeUtils.escapeJavaScript、HTMLの場合はc:out
を使用します。
は、例えば参照:PS
:あなたはデータベースを使用している場合、私は願って、あなたはあなたをエスケープしていますSQLステートメントが正しく、そうでなければ人々は非常に単純にアクセスを得ることができますあなたのデータベースとサーバに(SQL injectionと呼ばれます)
そして値に引用符が含まれているとどうなりますか? – RoToRa
あなたはバックエンドでそれを処理する必要があります。 – czerasz
"czerasz" - ありがとう、それでした! – user1197071