く: クエリには、値を分けて渡す。
この言葉の意味
データベースへの命令に利用者の入力を文字列としてつぎ足すと、入力が命令の一部として扱われる危険があります。値をパラメーターとして渡せる仕組みを使い、命令と入力値を分けましょう。テーブル名など値とは異なる部分の扱いも、利用する仕組みに応じて確かめます。
たとえば、こんな場面で
理解を助けるための仮の場面です。
よくある場面
検索語をSQLへ直接つなぐと、入力がクエリの構造として扱われるおそれがあります。画面の入力制限だけで防ごうとするのも不十分です。
こう変えてみる
ライブラリの方法に従い、パラメーターとして値を渡します。列名など値として渡せない要素は、許可する候補から選ぶなど別の制御を検討します。
自分に問いかける
入力値とクエリの構造が混ざる箇所は、どこに残っていますか。
今日の実践ヒント
入力値を使う検索処理を一つ見て、文字列の連結で命令を組み立てていないか確認しましょう。