質問: <%- age %> <% } %> ``` 余計に複雑になってないか?とも感じますが、テンプレートエンジンを利用することでコード内に直接SQL文を書くことを避けることができますし、for文などを利用したい場合には確実にこちらの方がシンプルになるのではないかと考えています。 SQL文の作成にテンプレートエンジンを利用するといった話はあまり聞いたことがありませんが、もしこの実装方法で開発を進めていく場合、今まではDB関連のモジュールに標準で備わっていた`?`を利用してエスケープ処理を任せていたが、そのような処理を独自に開発することになります。 テンプレートエンジンを利用するため独自に開発というと語弊がありますがもともとテンプレートエンジンはSQL専用のモジュールではないし`?`のエスケープ処理がどのように行われているか詳しく理解せずに独自のやり方で実装すると思わぬ脆弱性を生んでしまうかもしれません。 そこで、SQLインジェクション対策は基本的にエスケープ処理をしっかり行っていれば良いのかみなさんにお聞きいたしました。 squelのようなライブラリの利用も検討したのですが、JSとSQLを記述するプログラマで役割をもし分けていたというようなことを考えるとあまり望ましくないのではないか?と思いました。 SQLインジェクション対策は基本的にエスケープ処理を行うだけで良いのでしょうか? また、SQLの作成にテンプレートエンジンを使うことに対しても否定的な意見がありましたら是非ご指摘いただけるとありがたいです。 よろしくお願いいたします。
回答: > > SQLインジェクション対策は正しくエスケープ処理を行うだけでいいのか? > > > パラメータ化クエリを使うのが必須だと思います。あと、可能であれば静的プレースフォルダも。 以下の記事によると "高いスキルを持つ決然たる攻撃者は、パラメータ化されたデータであっても操作できるのです" とのことですから、パラメータ化しないのは論外かもしれません。 SQL インジェクション https://msdn.microsoft.com/ja-jp/library/ms161953(v=sql.100).aspx SQL Server 関係であれば、自分のブログで恐縮ですが、以下の記事を見ていただければと思います。 パラメータ化クエリ http://surferonwww.info/BlogEngine/post/2012/02/02/Parameterized-query.aspx SQL Server の他の DB については、以下の記事がまとまっていると思います。 安全なSQLの呼び出し方 - IPA 独立行政法人 情報処理推進機構 http://www.ipa.go.jp/security/vuln/documents/website_security_sql.pdf