人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

(PHP) SQL Injection対策で以下の方法は有効なのでしょうか?DBはMySQLです。

$test = $_POST['hate'];
$test = addslashes($test);
$test = mysql_escape_string($test);

よろしくお願いします。

●質問者: esecua
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB MySQL PHP SQL test
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ●
●40ポイント

上記の例は問題があります。

以下のようなプログラムを実行してみてください。

<?php
$con = mysql_connect("localhost", "user_id", "password");
$test = "'" . '"' . "\n"; // シングルクォート、ダブルクォート、改行
print "そのまま表示<br />$test<br />";
$test2 = addslashes($test);
print "addslashes適用後<br />$test2<br />";
$test3 = mysql_escape_string($test2);
print "addslashesとmysql_escape_string適用後<br />$test3<br />";
$test4 = mysql_escape_string($test);
print "mysql_escape_string適用後<br />$test4<br />";
$test5 = mysql_real_escape_string($test);
print "mysql_real_escape_string適用後<br />$test5 <br />";
mysql_close($con);
?>

出力結果は

そのまま表示
'" 
addslashes適用後
\'\" 
addslashesとmysql_escape_string適用後
\\\'\\\"\n
mysql_escape_string適用後
\'\"\n
mysql_real_escape_string適用後
\'\"\n

となります。

このようにaddslashes()とmysql_escape_string()の両方を使うとデータの意味が変わってしまいます。

SQL Injectionは防げますが、正しく動作しません。

http://jp.php.net/manual/ja/function.mysql-real-escape-strin...

尚、mysql_escape_string()ではなくMySQL のライブラリ関数をコールするmysql_real_escape_string()を使うことが推奨されています。

(この関数はMySQLに接続した状態でなければ使用できません。)

SQL Injectionを防ぐ方法は上記のmysql_real_escape_string()の説明ページにある「例 3. "うまいやり方" のクエリ」の部分を参照してみてください。

参考になると幸いです。

◎質問者からの返答

回答ありがとうございます。

SQL Injection 対策には mysql_real_escape_stringのみで十分なのでしょうか?それ以外にSQLを使った攻撃方法などあれば教えてください。


2 ●
●35ポイント

SQL Injectionについては上記をご確認ください。

色々な例が載っています。

(すでにご存知かもしれませんが、念のため。)

SQL Injection以外にSQLを使った攻撃は…ちょっと思いつきません。

「大量のレコードを検索するSQL」なども場合によっては危険かもしれません。

クロスサイトスクリプティングで予期しない値を渡されると何が起こるか分かりませんので、セキュリティ面ではSQL Injectionだけではなく、クロスサイトスクリプティングにも注意した方が良いでしょう。

SQL Injectionの件ですが、細かいところまで気にしだすと色々あるようです。

特に文字コードにShift-JISを使っている場合、注意が必要です。

こちらがよくまとまっていると思います。

mysql_real_escape_string()でもエスケープされないことがあるそうです。

参考になると幸いです。

◎質問者からの返答

ご丁寧な回答ありがとうございます。

それにしてもbonlifeさんは技術が非常に高いと見えます。今後も私の質問を見つけた際はよろしくお願いします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ