https://blog.flatt.tech/entry/node_mysql_sqlinjection
話題になってた Node.js の mysql ライブラリで SQL インジェクションができるというやつ
Node.js と mysql の組み合わせは考えてみると使ったことがなくて どのパッケージがいいかもわかってないくらい
いつか使うかもしれないし 危険があるなら知っておくためにも読んでみるかと開いてみました
長いから全部は読まず最初の概要だけしか読んでないけど プレースホルダーのパラメータでオブジェクトを渡すと予期せぬ結果になって SQL インジェクションできるらしい
え?これって使う人が悪いだけじゃないの?
外部から受け取ったデータをチェックもせずに DB のクエリに入れるなんてありえないし
メールアドレスや郵便番号のフォーマットに沿ってるかみたいなところまでは見なくても 最低限型のチェックくらいはするのが当たり前だと思う
Node.js やこのライブラリが良くないみたいな反応も見かけたけど 使い方が悪いだけで問題として扱うようなものでもない気がする
チュートリアルの説明ではバリデーションがないけど そのライブラリの使い方として重要なところでもないからそういうのはスキップして書かれるのは普通だし 最低限の例をそのまま正式なところで使うようなのはありえないと思う
趣味レベルで外部に公開しないようなものならともかく 世界にサービスとして公開するような人がそんなレベルだとは思いたくない
それに プレースホルダーがどんな文字列になろうと SQL インジェクションにならない気がするけど それがありえるってことは mysql 側のプリペアドステートメント機能を使わずライブラリ側でエミュレートして文字列化して送信してるのかな
そういうのは DB 側に任せたほうが安全な気がするけど
最初は特定の文字列だと正しくエスケープされないバグみたいのがあるのかなとか思ってましたが 特に気にするほどでも無いものでした
ユーザの入力は信用しないという当たり前のことをしようという話ですね