2017-06-30 12 views
0

XSS攻撃を防ぐために入力エンコードを実装していますが、私はいくつかの質問があります。XSS攻撃を防止するには、次のいずれの方法が効果的ですか?

  1. 入力をエンコードし、エンコードされたデータをデータベースに格納する方がよいでしょうか?もしそうなら、プロジェクト全体の文字列比較をどう扱うのですか?比較する文字列をエンコードしますか?私はプロジェクト全体を調整しなければならないので、将来のプログラマは2つの文字列を比較するたびにこれを覚えなければならないので、 "あまり良くない"アプローチのように思えます。

  2. 入力をデータベースに直接スローして応答する必要がありますか?これはより良い方法のようですが、私は本当にわかりません。それが私がここに投稿する理由です。また、これが好ましい方法であれば、データベースから直接JavaScriptを実行するデータベース管理アプリケーション(phpMyAdminなど)がありますか?

これは初めてのことです。経験豊かな開発者からの洞察が大好きです。

+0

はい、(2)は間違いなく良い方法です。また、自動的に実行するテンプレートエンジンを使用します。 – Ryan

+0

@Ryan迅速な対応をありがとう。私は現在、.NETで利用可能なAntiXSSEncoderクラスを使用しています。それは十分か?また、興味があれば、2番目の質問を更新しました。 – Sikor

+0

私はASP.NETのエキスパートではありませんが、壊れやすいようです - 剃刀を好むかもしれませんか? Re:あなたの編集:いいえ、それはphpMyAdminの恐ろしい脆弱性です。 – Ryan

答えて

1

私はこの前に何度も答えましたが、2は間違いなく正しいアプローチですが、少し調整してみましょう。

途中でデータを検証して、ドメインに応じてデータが有効であることを確認したいとします。たとえば、特定の文字を許可しない(または、より良い方法では、許可された文字のホワイトリストを使用する)ことができます。たとえば、人の名前に「<」を含めるべき理由はありません。無効な入力が含まれている場合は、リクエストを拒否します。 これはいくつかの攻撃を止めるかもしれませんが、確かにそれらのすべてではありません。

アウトプットエスケープは、あるコンテキストから別のコンテキストにデータを転送するときに適用されます。データが確実にデータを保持するようにしたい。したがって、データをSQLに挿入するときには、準備された文を使用します。データをXMLまたはHTMLに変換する場合は、それらをエンコードします。さまざまなコンテキストがあり、適切なコンテキストでエンコードする必要があります。 OWASP XSS防止チートシートを参照してください。あなたは右のエンコーディングを知らない

  1. トラブルが符号化し、データベースにエンコードされた値を格納することはあるだろう。データはHTML属性、タグ間などで表示されるはずですか?異なるコンテキストは異なるエンコーディングを必要とする。

  2. エンコード機能が間違っていて、何かを見逃した場合はどうなりますか?エンコードされたデータを格納する場合は、エンコード関数を更新するだけでなく、誤ってエンコードされたデータをすべて修正する必要があります。
  3. エンコードが不要なコンテキストでデータを表示する場合はどうすればいいですか? )。その後、それは醜く見えるだろう。

最近の私のアプローチでは、反応のような固体テンプレートフレームワークを使用することになります(データも適切にエンコードされます)。

+0

これは私が予想していたものですが、今私はそれについて確信しています。あなたの答えをありがとう。感謝します。 – Sikor

関連する問題