2016-07-26 21 views
0

データベースからデータを読み込んで表示するWebページがありますが、その中にHTMLを含む可能性があるデータの問題が見つかりました。私のデータベースでHTMLコードのサニタイズ

I持って、次の3つのエントリ:

ボブ

ジル

<button onClick="alert('hi')">Click me!</button> 

今、私は、データを取得し、それを表示し、上のクリックイベントがあり、私のHTMLページを持っています各エントリは次のようになります。

<div onClick="DoSomething()"> 
    <a>Bob</a> 
</div> 

マイコードが削除されています花茎の文字ので<は、私が最後のエントリを取得し、私が終わるまでは正常に動作します&lt;

次のようになります。

<div onClick="DoSomething()"> 
    <a>&lt;button onClick="alert('hi')"&gt;Click me too!&lt;/button&gt;</a> 
</div> 

予想通り、私は見るでしょうので、それが表示されます。

<button onClick="alert('hi')">Click me too!</button> 

をが、それはまた、 "ハイ"を表示しようとしているクリックイベントがあるはずです。

名前で定義されているonClickを安全に止めることができますが、周囲のdivにonClickイベントが残っていることを知っている人はいますか?

データベースに追加できる名前を制限することはできません。

+0

サニタイズしないようにすると、アプリをXSS攻撃に開く可能性があります。誰かが理論的にコードを注入して実行することができます – vsync

+0

htmlを含む悪い名前は現在存在しません。これは極端な例を示していますが、私はデータベースに入力できる名前を制限する方法がありません(これは15歳以上のレガシーデスクトップアプリケーションで、現在はWebインターフェイスを使用しています)。だから私は浄化する必要がありますが、私はどのようにそれを行うことができますが、まだユーザーが入力した名前を保持するか分からない。私はエスケープ文字を変更することでこれができると思った。 – sbarnby71

+0

@ sbarnby71 PHPを使用している場合は、striptags:http://php.net/manual/pt_BR/function.strip-tags.phpを使用できます。他の言語では、ロジックは同じです。 – user3753202

答えて

0

何が起きているのかがわかります。

<div onclick="DoSomething()" DispName="&lt;button onClick="alert('hi')"&gt;Click me too!&lt;/button&gt;"> 
    <div>&lt;button onClick="alert('hi')"&gt;Click me too!&lt;/button&gt;</div> 
<div> 

私のonclickイベントが呼び出されたときに、私が使用します。私は、私は例えば、その上にカスタム属性がDISPNAMEと呼ば作成し、その中にアイテムの名前を入れていた項目名を保持するHTML要素を作成する場合.getAttribute( "DispName")クリックして値を取得すると仮定したエンティティで<ボタンonClick = "alert( 'hi')" >私もクリックしてください! < /ボタン>私が戻ってきたのは、化身化されていないテキスト<button onClick="alert('hi')">Click me too!</button>でした。

DOMにHTML要素を追加するとすぐに、DispNameの値がDOMによってunsanitizedされていると思います。アトリビュートにないサニタイズされたスクリプトは、期待通りに残されています。

誰でもこれを確認できるのかどうかはわかりませんが、DispNameの値を試してみると不正なスクリプトが実行される理由がわかりました。

関連する問題