なぜhtml.encode()を行う必要があるのですか
-
04-10-2019 - |
質問
ユーザーがRich Text Editor(Tiny Editor)にデータを入力し、データベースに保存しているデータを送信してから、他のダイナミックWebページに表示するために取得する場合、なぜここでエンコードする必要があるのですか。
誰かがJavaScriptをリッチテキストエディターに貼り付けることができるので、唯一の理由はありますか?他に理由はありますか?
解決
セキュリティが理由です。
最も明白な/一般的な理由はです クロスサイトスクリプト (XSS)。それはあなたがあなたのサイトで目撃するかもしれないセキュリティ問題の根本的な原因であることが判明しました。
クロスサイトスクリプト(XSS)は、悪意のある攻撃者が他のユーザーが閲覧したWebページにクライアント側のスクリプトを注入できるようにするWebアプリケーションで一般的に見られるコンピューターセキュリティの脆弱性の一種です。攻撃者は、攻撃者が同じオリジンポリシーなどのアクセス制御をバイパスするために使用できます。 Webサイトで実行されたクロスサイトスクリプトは、2007年現在、Symantecが文書化したすべてのセキュリティの脆弱性の約80%でした。1 それらの影響は、脆弱なサイトで処理されたデータの感度と、サイトの所有者によって実装されたセキュリティ緩和の性質に応じて、ささいな迷惑から重大なセキュリティリスクにまで及びます。
さらに、以下のコメントに示すように、サイトのレイアウトも台無しにすることができます。
あなたが必要です Microsoft Anti-Cross Site Scripting Library
より多くのリソース
他のヒント
あなたはいくつかの間違いを犯しています。
リッチテキストエディターからHTML-Formattedテキストを受け入れている場合、あなた できません 電話 Html.Encode
, 、またはすべてのHTMLタグをエンコードし、フォーマットされたテキストの代わりに生のマークアップが表示されます。
ただし、XSSから保護する必要があります。
言い換えれば、ユーザーが次のHTMLを入力した場合:
<b>Hello!</b>
<script>alert('XSS!');</script>
あなたは維持したい <b>
タグですが、ドロップ(エンコードしない) <script>
鬼ごっこ。
同様に、インラインイベント属性を削除する必要があります( onmouseover
)およびJavaScript URL( <a href="javascript:alert('XSS!');>Dancing Bunnies!</a>
)
厳密なXMLパーサーを介してユーザーのHTMLを実行し、コンテンツを保存するときにタグと属性の厳格なホワイトリストを維持する必要があります。
「エンコード」を「スクラブ」と混同していると思います。
受け入れたい場合 文章 ユーザーからする必要があります エンコード HTMLとしてHTMLとしてレンダリングする前にHTMLとして。このようにして、テキスト
a < b
HTMLエンコードとして
a < b
HTMLブラウザでレンダリングされます(ユーザーが入力したように)。
a < b
受け入れたい場合 HTML ユーザー(この場合はそうするように聞こえます)から、すでにHTML形式になっているため、html.encodeに再度電話したくありません。ただし、許可されていない特定のマークアップを削除するようにスクラブする場合があります(スクリプトブロックなど)。
セキュリティが主な理由です。
ユーザーがJavaScriptコードまたは他のいたずらを入力できるだけでなく、ページに特定の文字を表示するためにHTMLエンコードを使用する必要があります。データベースには「素敵なページ: - >」が含まれているため、ページを壊したくないでしょう。
また、データベースにコードを入力する場合は、データベースへの入力を必ず「サナティ化」してください。
はい、誰かが悪意のある文字列をリッチテキストエディターに入力する場合、JavaScriptが実行されないようにします。ただし、プレーンテキストJavaScriptそれはあなたの唯一の懸念ではありません。たとえば、これはXSSです。
<IMG SRC=javascript:alert('XSS')>
さまざまなXSSオプションの範囲をご覧ください。 http://ha.ckers.org/xss.html
余談です..... MVC2が新しい機能を実装しているため、html.encodeを呼び出す必要がなくなります
ビューの構文を変更した場合
に
MVCは自動的にエンコードします。物事がはるかに簡単に/速くなります。繰り返しますが、MVC2のみ
もう1つの理由は、一部のユーザーがいくつかのクロージングタグを入力できることです </div></table>
そして、あなたのウェブサイトのレイアウトを潜在的に破る。 HTML編集ツールを使用している場合は、エンコードなしでページに埋め込む前に、生成されたHTMLが有効であることを確認してください。これを行うには、一部のサーバー側の解析が必要です。使用できます htmlagilitypack これをする。