SQLインジェクションが発生する理由を知っていれば、この質問に自分で答えることができます。
どれどれ。 CWEはSQLインジェクション(CWE-89)について説明しています 次のように:
さらに:
つまり、基本的に、生成されたSQLクエリで外部から影響を受けた入力は、意図したとおりに解釈されません。ここで重要なのは、意図したとおりに解釈されないです。 。
ユーザー入力が
ええと、文字列リテラル SQLパーサーによって識別される特定の構文があります:
さらに:
さらに、文字列リテラル内で引用符を使用できるようにするには:
これらの後者のシーケンスはすべて文字列リテラルに固有であるため、文字列リテラルとして解釈されることを目的としたデータは、これらのルールに準拠するように適切に処理される必要があります。これは特に意味します。言及された文字のいずれかが文字列リテラルで使用されることを意図している場合、それらは言及された方法の1つとして記述されなければなりません。
したがって、このように見ると、セキュリティの問題ではなく、単に意図したとおりに解釈されるようにデータを処理するという問題です。 。
同じことが他のリテラルやSQLの他の側面にも当てはまります。
では、あなたの質問はどうですか?
はい、それはSQLインジェクションから安全です。 bin2hex
16進文字のみを含む文字列を返します。また、これらの文字をMySQL文字列リテラルで使用する場合、特別な処理は必要ありません。
しかし、真剣に、パラメータ化/プリペアドステートメントのような便利なテクニックを提供するライブラリやフレームワークがあるのに、なぜこれらの面倒なフォーマットテクニックを使いたいのでしょうか?