SQL インジェクションでの特殊文字のエスケープ
SQL インジェクションを防ぐには、クエリの実行を操作する可能性のある特定の文字をエスケープすることが重要です。 MySQL API の mysql_real_escape_string() 関数によれば、次の文字はエスケープする必要があります:
<pre class="brush:php;toolbar:false">0x00 : "\0", 0x08 : "\b", 0x09 : "\t", 0x0a : "\n", 0x0d : "\r", 0x1a : "\Z", 0x22 : '\"', 0x25 : "\%", 0x27 : "\'", 0x5c : "\\", 0x5f : "\_",
ただし、OWASP.org の Python 用 ESAPI セキュリティ ライブラリは、エンコード メカニズムに次の文字を含めて、これらの文字を超えています。
SELECT a FROM b WHERE c = '...user input ...';
'%' や '_' などのメタ文字をエスケープする必要がある理由は理解できますが、バックスペース ('b') およびタブ文字 ('t') 文字が含まれていると疑問が生じます。
タブレータとバックスペース文字に関するセキュリティ上の懸念
タブレータ文字 ('t')
タブレータ文字 (ASCII コード 9) はカーソルを移動します特定のシステム用に定義された次のタブストップに移動します。 SQL クエリでは、空白スペースの挿入やデータの位置合わせにタブレータを使用できます。タブストップの設定によっては、攻撃者がクエリを変更したり空白を挿入したりして、意図しない動作を引き起こす可能性があります。
バックスペース文字 ('b')
バックスペース文字 (ASCII コード 8) はカーソルを 1 文字後方に移動し、事実上上書きします。 SQL クエリでは、バックスペースを使用して以前に入力されたデータを消去することができ、インジェクションやデータ操作につながる可能性があります。
例: バックスペース文字の悪用
次のことを考慮してください。 query:
Bobby]dor[p TA[ble[s
悪意のあるユーザーがバックスペース文字を含む値を入力すると、クエリの一部が消去され、意図しない動作が発生する可能性があります。たとえば、次の入力を挿入すると:
SELECT a FROM b WHERE c = 'Bobby';
バックスペースで文字「[dor[p TA[ble[s"」が削除された後、クエリは事実上次のようになります。
この悪意のあるinput は、c が 'Bobby' に等しいすべての行を返す可能性があり、機密情報が侵害される可能性があります。
結論
タブ文字とバックスペース文字のエスケープは一般的には必要ありませんが、それらは特定のシナリオでは、SQL インジェクションを防ぐために役立つ場合があります。これらの文字をエスケープすることで、開発者は悪意のあるユーザーが潜在的な脆弱性を悪用して SQL クエリを改ざんしたり侵害したりすることを確実に防ぐことができます。
以上がSQL インジェクションではバックスペース文字とタブ文字をエスケープする必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。