しかし、「インジェクション対策」なるものだけは聞いたことがある。
やらないと、DBを破壊されたりするからだ。
分かりそうなとこを調べてみた。
「ふっかつのじゅもんがちがいます。」withぬこさんの記事がすごく分かりやすかった。
http://d.hatena.ne.jp/ajiyoshi/20100409/1270809525
「単にプリペアドステートメントを使え」
よく分からないので、これだけを守ろう。追加して「文字列結合でSQLを構築するな」も注意しよう。
こうしておけば、途中で「'」コーテーションや「#」などを入れられて、
不測のコードが実行されることは少なくなるのだろうと思う。
詳しくは、ockeghem(徳丸浩)の日記さんの下記の記事がまとまっている。
■「SQLインジェクション対策」でGoogle検索して上位15記事を検証した
http://d.hatena.ne.jp/ockeghem/20111109/p1
プリペアードの使い方はよく分からないが、下記のようなものらしい。
「?」の部分に変数がくるように割り当てるのだろうと思う。
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
$stmt->execute();
SQLite3のプリペアードについては、idocsq.netさんが詳しい。
http://idocsq.net/page/124
0 件のコメント:
コメントを投稿