• ベストアンサー
  • すぐに回答を!

検索機能ソースの脆弱性に関して

  • 質問No.2407465
  • 閲覧数278
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 100% (7/7)

以前こちらでPHPの検索機能のソースに関して質問させて頂いた者です。そのときに、作成したソースに「SQLインジェクション」の可能性があるとのご指摘を受けたのですが、下記のソースを見ていただいて、どこに脆弱性があるのか、わかる方がおられましたら是非教えていただきたく存じます。
拙い知識ながらも、本等で調べて、$_POST['key']で受け取ったデータを、get_magic_quotes_gpcの設定がOFFの場合は、addslashes関数でエスケープ処理をする設定にしたのですが、フォームの入力値に「str' or '1'='1」のようなSQLインジェクション確認用の文字を入れたり、ソースの検証を自分で行った限りでは、エラーが発見できなかったのですが、どこがまずいのでしょうか?
ご教示いただけますよう、宜しくお願いいたします。

検索フォーム
<form method="post" action="view.php">
<input type="text" name="key">
<input type="submit" name="search" value="検索">
</form>

ログ表示PHP(view.php)
$key = "%";
if (isset($_POST['key'])) {
$key = (get_magic_quotes_gpc()) ? $_POST['key'] : addslashes($_POST['key']);
}
$sql = "SELECT * FROM shop WHERE todohuken='XX' ";
if(strlen($key) > 0){
$key = str_replace(" ", " ", $key);
$array = explode(" ", $key);
$and = "AND ";
for($i=0; $i<count($array); $i++){
$and .= "address LIKE '%$array[$i]%'";
if($i < count($array)-1){
$and .= " AND ";
  }
 }
}
mysql_select_db($database_connDB, $connDB);
$Recordset1 = mysql_query($sql.$and.";", $connDB) or die(mysql_error());

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 35% (440/1242)

お礼コメント
uni51

お礼率 100% (7/7)

がるさん、前回に引き続きご丁寧な回答ありがとうございます。
addslashes関数を使うことの危険が認識できました。
今回はmysql_escape_string関数を使用しようと思います。
ありがとうございました。
投稿日時:2006/09/16 11:47

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 42% (926/2160)

mysql_real_escape_string
もあります。
お礼コメント
uni51

お礼率 100% (7/7)

そうですね。
mysql_real_escape_string関数の存在は知っていたのですが、今回はPHPの4.3.XXでの運用を考えているので、mysql_escape_string関数を使用するつもりです。
ご回答いただき、ありがとうございました。
投稿日時:2006/09/16 11:49
  • 回答No.1

ベストアンサー率 73% (192/263)

addslashes関数よりも、mysql_escape_string関数を利用した方が良いのではないかと思います。
お礼コメント
uni51

お礼率 100% (7/7)

ご回答ありがとうございます。
私も最近本で調べたところ、addslashes関数よりも、mysql_escape_string関数やmysql_real_escape_string関数を使用した方が良いという記述は拝見しました。
やはりaddslashes関数には脆弱性があるのですね。
参考になりました。
投稿日時:2006/09/15 21:02
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ