クロスサイトスクリプティング防止<&gt>


2

<>記号をスキップするだけのアプリケーションをテストしています。検証されるユーザー入力は、常に<b>,<span>,<div>などのhtmlタグの間に挿入され、属性としてページに渡されることはありません。それは十分な保護か、この種のフィルターをバイパスする方法がありますか?

例:

<a href="http://www.site.com" style="color:white"> 
    UserInput 
</a> 

よろしく。

+2

文字を取り除いてエンコードしないでください。それとも、あなたのWebフレームワークを自動的にエンコードすることをお勧めします。 13 8月. 132013-08-13 14:54:18

  0

私はCodesInChaosに同意します...開発コストのために、弱い入力暗号化処理をセキュリティの形態として持つのではなく、必要に応じてエンコードを出力することもできます。ユーザー入力がJavaScript変数または<input>タグのフィールドとして終わると、今後何が起こりますか? 14 8月. 132013-08-14 15:26:17

  0

私は問題を正しく理解していますが、 '$ UserInput = &lt;スクリプト&gt; alert(1); &lt;/script&gt'? 09 12月. 132013-12-09 18:59:53

5

これにより、攻撃者はマークアップとして誰かのブラウザによって解釈されるバイトシーケンスにこっそりすることができるかもしれない多くの方法があります

十分な保護ではありません。

を使用して、<>の文字を渡すこともできます。

double encodingは、フィルタをバイパスするために使用することも、overlong utf-8 sequencesでも使用できます(ただし、最後の1つは古く、ほとんどのソフトウェアスタックはそれに該当しません)。

これはほんの一例ですが、many moreのような単純なマークアップフィルタをバイパスする方法があります。特にThis bitが適切です。開始する

  0

私はこれらの方法をすべて試しましたが、誰も働いていませんでした。また、私は< and >が実際のhtmlタグだけにフィルタリングされていないことに気付きました。 13 8月. 132013-08-13 13:53:27

+1

@NucklearあなたがOWASPのページからすべてのものをあなたのフィルターに投げたならば、おそらくかなり良いでしょう。しかしホワイトリストは依然として好ましいアプローチです。例えば ​​'msg.matches(" [\ w \ s] * ")' 13 8月. 132013-08-13 13:59:05


1

ああ、...

それはブラックリストが失敗していることだ、何度も何度もして、もう一度自分自身を証明しているセキュリティの信条がある場合。

長いゲームをプレイしてください - あなたのウェブアプリケーションは今日あなたが投げた攻撃の数には限りがありますが、インターネットは何千もの変数を追加して試すことができます(新しいコード、異なるブラウザ、異なる言語セットなど、等)。

"確認されているユーザー入力は常に" - 今日あなたに言います。あなたが上に移動し、別の開発者がそのコードを継承するとどうなりますか?彼らはあなたがあなたの頭の中であなたがした約束を理解し、尊重するつもりですか?検証と出力エンコーディングを入力すると、次の人に戦うチャンスが与えられます。

先に行くと、 "" <スクリプト>" を取り除く誰かが "" > IPT " < SCR <スクリプト>" を送信したとき、何が起こりますか?

<a href="http://www.site.com" style="color:white"> 
    UserInput 
</a> 

のhrefを入力タグから引き出されている場合:あなたがここで提供URL内HREFを提供している


0

。これは、ユーザ入力のフィルタリングやエスケープが十分でないという別のケースです。すべてのユーザー入力は悪とみなす必要があります。例えば

それはあなたの例の場合とアンカータグのURLを供給ユーザーであれば、このsXSSが上に動作し、すべてのマウスにロードすることは完全に可能である:

また
URL: http://www.site.com" onmouseover="javascript:alert(1)" 

、あなたonmousover to onloadが変更され、すべてのページの読み込み時にJavaScriptが実行されるようになりました。この種のsXSS攻撃を防ぐもう一つの方法として、HTMLタグ内からDOMイベントを無効にする方法があります。