データベースからデータを読み込んで表示するWebページがありますが、その中にHTMLを含む可能性があるデータの問題が見つかりました。私のデータベースでHTMLコードのサニタイズ
I持って、次の3つのエントリ:
ボブ
ジル
<button onClick="alert('hi')">Click me!</button>
今、私は、データを取得し、それを表示し、上のクリックイベントがあり、私のHTMLページを持っています各エントリは次のようになります。
<div onClick="DoSomething()">
<a>Bob</a>
</div>
マイコードが削除されています花茎の文字ので<は、私が最後のエントリを取得し、私が終わるまでは正常に動作します<
次のようになります。
<div onClick="DoSomething()">
<a><button onClick="alert('hi')">Click me too!</button></a>
</div>
予想通り、私は見るでしょうので、それが表示されます。
<button onClick="alert('hi')">Click me too!</button>
をが、それはまた、 "ハイ"を表示しようとしているクリックイベントがあるはずです。
名前で定義されているonClickを安全に止めることができますが、周囲のdivにonClickイベントが残っていることを知っている人はいますか?
データベースに追加できる名前を制限することはできません。
サニタイズしないようにすると、アプリをXSS攻撃に開く可能性があります。誰かが理論的にコードを注入して実行することができます – vsync
htmlを含む悪い名前は現在存在しません。これは極端な例を示していますが、私はデータベースに入力できる名前を制限する方法がありません(これは15歳以上のレガシーデスクトップアプリケーションで、現在はWebインターフェイスを使用しています)。だから私は浄化する必要がありますが、私はどのようにそれを行うことができますが、まだユーザーが入力した名前を保持するか分からない。私はエスケープ文字を変更することでこれができると思った。 – sbarnby71
@ sbarnby71 PHPを使用している場合は、striptags:http://php.net/manual/pt_BR/function.strip-tags.phpを使用できます。他の言語では、ロジックは同じです。 – user3753202