7

Twitterのような有名なサイトでさえXSSの脆弱性に苦しんでいますが、この種の攻撃を防ぐために何をすべきでしょうか?

4

3 に答える 3

8

あなたができる一番のことは、CookieをHTTPのみに設定することです...これにより、少なくともセッションCookieのハイジャックから保護されます. あなたが自分のサイトの管理者である可能性が高いときに、誰かがあなたの Cookie を盗むようなものです。

残りは、すべてのユーザー入力を検証することになります。

  • ルール #0 - 許可された場所以外では信頼できないデータを挿入しない
  • ルール #1 - 信頼できないデータを HTML 要素のコンテンツに挿入する前に HTML をエスケープする
  • ルール #2 - 信頼できないデータを HTML 共通属性に挿入する前に属性をエスケープする
  • ルール #3 - 信頼できないデータを HTML JavaScript データ値に挿入する前に JavaScript をエスケープする
  • ルール 4 - 信頼できないデータを HTML スタイルのプロパティ値に挿入する前に CSS をエスケープする
  • ルール #5 - 信頼できないデータを HTML URL 属性に挿入する前の URL エスケープ

ここで詳細に議論された非常に長い主題:

http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

http://www.owasp.org/index.php/Cross_site_scripting

XSS は多くのエクスプロイトの 1 つにすぎず、すべての Web 開発者はトップ 10 の OWASP を暗記する必要があります。

http://www.owasp.org/index.php/Top_10_2007

于 2009-05-03T04:13:59.330 に答える
2

プリペアド ステートメントを使用して SQL インジェクションを問題にしないように、同様のことを行うテンプレート エンジン (DOM シリアライザー) を使用して XSS を問題にしないようにすることができます。

すべての出力がテンプレート エンジンを経由するようにアプリケーションを設計します。テンプレート エンジンがデフォルトですべてのデータを HTML エスケープするようにします。このようにして、デフォルトで安全であり、人間 (および大規模なシステムの残りの部分) が HTML のエスケープに熱心に取り組んでいることに依存しないシステムを手に入れることができます。

于 2009-05-25T20:32:31.923 に答える
1

私はあなたがあなたのコードを書くものではありませんが、あなたがasp.netを使うなら、あなたは部分的にカバーされています。asp.netには、要求検証と呼ばれるものがあり、有効にすると、ユーザー入力を介して悪意のあるスクリプトが導入されるのを防ぎます。

ただし、この質問に入力したようなテキストエディタを許可する必要がある場合もあります。この場合、エンドユーザーが「リッチテキスト」HTMLを入力できるようにするには、リクエストの検証を部分的に無効にする必要があります。この場合、何らかのホワイトリストフィルタリングメカニズムを構築する必要があります。

参考までに、他の人については知りませんが、MicrosftにはAnti-Xssというライブラリがあります。

于 2009-05-03T03:53:15.167 に答える