ユーザーはデータベースに何でも挿入できます。
そのため、文字のホワイトリスト/ブラックリストを使用することはオプションではありません.
データベースの終わり (SQL インジェクション) については心配していません (カバーしています)。
htmlspecialchars()
コード インジェクションを防ぐのに十分でない状況はありますか?
ユーザーはデータベースに何でも挿入できます。
そのため、文字のホワイトリスト/ブラックリストを使用することはオプションではありません.
データベースの終わり (SQL インジェクション) については心配していません (カバーしています)。
htmlspecialchars()
コード インジェクションを防ぐのに十分でない状況はありますか?
ユーザーテキストを一重引用符で囲まれた属性に挿入する場合、プレーンhtmlspecialchars
では不十分です。その場合は追加する必要がENT_QUOTES
あり、エンコーディングを渡す必要があります。
<tag attr='<?php echo htmlspecialchars($usertext);?>'> //dangerous if ENT_QUOTES is not used
ユーザー テキストを文字列として javascript/json に挿入する場合は、追加のエスケープが必要になります。
スタンジ文字セットでも失敗すると思います。しかし、通常の文字セット UTF-8、Latin1 などのいずれかを使用すると、期待どおりに動作します。
いいえ、すべての状況で十分というわけではありません。コードベースに大きく依存します。たとえば、JavaScript を使用してデータベースに対して特定の AJAX 要求を行うhtmlspecialchars()
場合、(使用する場所によっては) では不十分な場合があります。JavaScript XSS から Cookie を保護したい場合htmlspecialchars()
も、十分ではありません。
htmlspecialchars()
失敗する可能性がある場合の例を次に示します: https://www.owasp.org/index.php/Interpreter_Injection#Why_htmlspecialchars_is_not_always_enough。あなたの質問は、使用しているデータベースにも大きく依存しています (誰もが MySQL を使用しているわけではありません)。複雑なアプリケーションを作成している場合は、これらの煩わしい小さな特異性を抽象化し、アプリケーション コードについて心配させてくれる多くのフレームワークの 1 つを使用することを強くお勧めします。
htmlspecialchars で十分です。with<
と and>
に変換され<
、>
スクリプトを含めることはできなくなりました。