良い質問です: PHP 日付フォーマッターは SQL インジェクションから安全ですか?
出発点は、あなたの例に従ってフォーマットがハードコードされているかどうかだと思います。日付フォーマット文字列を使用すると、フォーマットされた日付に生の文字を含めることができますが、これには安全でない文字が含まれる可能性があります。そのため、フォーマット文字列に変数を使用している場合、答えは間違いなく「いいえ、安全ではありません」です。
与えられた例のように、ハードコードされた形式を使用している場合、それはより難しい質問ですが、「の出力がDateTime::format
目的の形式から逸脱することはありますか?」ということになります。
これに対する答えは「はい」false
です。失敗しても出力できます。これにより SQL が壊れることはありませんが、予期しない結果になる可能性があります。
理論的には、それはそれが得るのと同じくらい悪いはずです。
ただし、防御的に考える必要があります。DateTime クラスには、不適切な形式の日付を出力する原因となる微妙なバグが見つからないことは言うまでもありません。通常、この種のバグはセキュリティ上の問題とは見なされません。それはただの迷惑だろう。特に、通常の使用では再現が難しい場合。しかし、それを SQL に直接渡すことと組み合わせると、簡単にセキュリティの問題になる可能性があります。
レッスンは防御的プログラミングです:すべてをサニタイズします。安全だと確信していても。自分の言語やフレームワードにバグがないと思い込まないでください。防御的プログラミングとは、あらゆるレベルで安全であることを意味し、予期しないバグがプログラムのさらに上位にある場合や制御できない場合、コードが攻撃にさらされることはありません。