📝

【SQL】プリペアードステートメントのすすめ

2024/05/02に公開

Zenn で記事を書いていきます。

最初に書くのはプリペアードステートメントのすすめについてです。

みなさん、ソースコード上で SQL を使う時にはプリペアードステートメント (? とか :hoge) を使いましょう。

以下に挙げる特殊文字に起因する脆弱性やエラーを未然に防げます。

SQL インジェクション対策

プリペアードステートメントで値を埋め込むと ' などの特殊文字をただの文字列として解釈してくれます。

そのため、SQLインジェクション対策になります。

Syntax Error 対策

特殊文字をただの文字列として解釈してくれるため、それに起因する Syntax Error を未然に防げます。

例えば、 O'Conner を直接埋め込んで WHERE name = 'O'Conner' にしてしまうと、十中八九 Syntax Error が発生します。

このため、 ''' に変換するなどしてエスケープしないといけませんが、プログラム側での特殊文字のエスケープは面倒ですし、エスケープ対象に漏れがあると大変です。

プリペアードステートメントで値を埋め込むことでエスケープせずともただの文字列として解釈してくれるので、エスケープ漏れを心配する必要がなくなります。

まとめ

特殊文字を直接埋め込んでしまうと面倒なことになるので SQL をプログラム上で利用する時はプリペアードステートメントを使いましょう。

Discussion