7

Webforms ASP.NET アプリケーションが可能な限り安全であることを確認しようとしています。ユーザー入力データを受信して​​ SQL データベース (通常のもの) に保存するのは、ログインしているユーザーのみであるため、一般には公開されていません。

入力ページを無効ValidateRequestにすることで、XSS 攻撃のリスクがあることを理解しています。すべての SQL クエリはパラメーター化されているため、SQL インジェクションから安全です (正しいですか?)。

Anti-XSS ライブラリを使用するのではなくHTMLencode、入力テキストに対して使用できますか? HTMLencode次に、 d文字列を保存しますか?

それとも、私はそれを間違った方法で見ていますか?ユーザーの入力を逐語的に保存し、その後、HTMLencodeまたはXSS-HTMLencodeいつでもブラウザーに出力する必要がありますか?

4

2 に答える 2

3

OK、よく読んでみると、SQL インジェクションから保護するために、入力を逐語的に保存し、何も調整せず、単純にパラメータ化するというのが一般的な知恵のようです。

ここにいくつかの良いコメントがあります: PHP サイトで xss 攻撃を回避するためのベストプラクティスは何ですか?

次に、HTML エンコード (扱いにくいようです)、または XSS-Library を使用して出力をエンコードします。

次に、ここで XSS 攻撃の例を使用します: https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheetこれらのいくつかをデータベースに入力し、ブラウザに読み戻します。適切なエンコーディングを使用すると、テキストが表示され、スクリプトが実行されることはありません。

于 2013-05-17T09:07:33.830 に答える
1

インジェクションと XSS 攻撃がOWASP トップ 10の最初の 2 つのスポットを保持していることを考慮すると、asp.net でリクエスト検証を無効にする場合は十分に注意する必要があります。

まず、本当に必要でない限り、リクエストの検証を無効にしないでください。やるには理由が必要です。リクエストの検証は、XSS タイプの攻撃に対するネイティブ メカニズムです。

次に、常にすべての入力フィールドに対してホワイト リストの検証を行います。これにより、受け入れ可能なチャーターのみを通過できます。

'<' や '>' などの文字を無視する必要がある場合がありますが、これは潜在的に危険です。

そのため、ページに表示する場合は常に出力をエンコードする必要があります。いつも。これにより、JavaScript (入力に挿入された場合) が実行されなくなります。

パラメーター化されたクエリは、SQL インジェクション攻撃を防ぐために、前述のホワイト リストの検証と出力エンコーディングと共に使用する必要があります。

また、SQLストアドプロシージャ内で動的クエリ構築(動的SQL)を行わないでください。

そして、すべての DB ユーザーと sql ストアド プロシージャが、DB リソースへの適切なレベルのアクセス権を持っていることを確認してください (可能な限り少ないアクセス権のアプローチ)。

于 2013-05-27T07:06:46.990 に答える