のための完全に安全私の方法です。私の方法は何かを説明しましょう。は、私はチャットのウェブサイトを持っていると私はそれがXSSが安全であるかどうかを知りたいXSS
私は、AJAX要求から着信されている画面に新しいメッセージを追加するには、このjQueryのコードを使用します。
$("#message").prepend(req.msg);
私はこれが脆弱であるが、DB上のメッセージがエンコードされている知っています。エンコードされたよう
<text>TEST</test>
それはデータベースに保存されている:私はそのペイロードメッセージの送信時にそう
<text>TEST</test>
を私はthis答えで.htmlentitiesをバイパスしているシナリオ()関数を知っています。まもなく:私たちは、このHTMLコードにa onclick=alert(document.cookie)
入力を送信する場合
<input value=<%= HtmlEncode(somevar) %> id=textbox>
は、それはなります:
<input value=a onclick=alert(document.cookie) id=textbox>
だから、このシナリオでは、エンコーディング
< > ; &
文字が私たちを救うことはできません。しかし、私はこのようなコードを書いていないので、私はその脆弱性から安全だと思う。私のサーバは次のようなJSONを返します:
..."msg" : "<tr><td><b>user:<\b> <text>TEST</test><\td><\tr>",...
そして、私は直接msgをデータに追加します。私はこれが完全に安全だと思う。ハッカーはXSSに< > ; &
文字を使用する必要があります。 \
も\\
とエンコードしています。しかし、多分私は何かを逃している。それは完全に安全ですか?
私はデータベースにHTMLエスケープされたデータを格納しません。HTMLパーサの代わりにテキストパーサを使用してページに挿入するだけです。そして、すべての属性値を引用符で囲み、挿入された内容の引用符をエスケープします。 – Oriol
申し訳ありませんが、あなたは何をページに「挿入」しますか?エスケープされていないメッセージを保存し、印刷前に実行時にエスケープすることをお勧めしますか?それは何か変わるのだろうか? – Unhappy
例えば、 '$(" message#).prepend(document.createTextNode(req.msg)); 'req.msg'をHTMLとして解析するのではなく、テキストノードの前に追加します。 – Oriol