10

ユーザーはデータベースに何でも挿入できます。

そのため、文字のホワイトリスト/ブラックリストを使用することはオプションではありません.

データベースの終わり (SQL インジェクション) については心配していません (カバーしています)。

htmlspecialchars()コード インジェクションを防ぐのに十分でない状況はありますか?

4

4 に答える 4

4

ユーザーテキストを一重引用符で囲まれた属性に挿入する場合、プレーンhtmlspecialcharsでは不十分です。その場合は追加する必要がENT_QUOTESあり、エンコーディングを渡す必要があります。

<tag attr='<?php echo htmlspecialchars($usertext);?>'> //dangerous if ENT_QUOTES is not used

ユーザー テキストを文字列として javascript/json に挿入する場合は、追加のエスケープが必要になります。

スタンジ文字セットでも失敗すると思います。しかし、通常の文字セット UTF-8、Latin1 などのいずれかを使用すると、期待どおりに動作します。

于 2011-11-12T18:37:15.457 に答える
3

いいえ、すべての状況で十分というわけではありません。コードベースに大きく依存します。たとえば、JavaScript を使用してデータベースに対して特定の AJAX 要求を行うhtmlspecialchars()場合、(使用する場所によっては) では不十分な場合があります。JavaScript XSS から Cookie を保護したい場合htmlspecialchars()も、十分ではありません。

htmlspecialchars()失敗する可能性がある場合の例を次に示します: https://www.owasp.org/index.php/Interpreter_Injection#Why_htmlspecialchars_is_not_always_enough。あなたの質問は、使用しているデータベースにも大きく依存しています (誰もが MySQL を使用しているわけではありません)。複雑なアプリケーションを作成している場合は、これらの煩わしい小さな特異性を抽象化し、アプリケーション コードについて心配させてくれる多くのフレームワークの 1 つを使用することを強くお勧めします。

于 2011-11-12T18:36:44.540 に答える
2
于 2011-11-12T18:36:11.940 に答える
1

htmlspecialchars で十分です。with<と and>に変換され&lt;&gt;スクリプトを含めることはできなくなりました。

于 2011-11-12T18:35:33.167 に答える