• ベストアンサー

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

以前こちらで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());

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2
uni51
質問者

お礼

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

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

mysql_real_escape_string もあります。

参考URL:
http://www.php.net/manual/ja/function.mysql-real-escape-string.php
uni51
質問者

お礼

そうですね。 mysql_real_escape_string関数の存在は知っていたのですが、今回はPHPの4.3.XXでの運用を考えているので、mysql_escape_string関数を使用するつもりです。 ご回答いただき、ありがとうございました。

回答No.1

addslashes関数よりも、mysql_escape_string関数を利用した方が良いのではないかと思います。

uni51
質問者

お礼

ご回答ありがとうございます。 私も最近本で調べたところ、addslashes関数よりも、mysql_escape_string関数やmysql_real_escape_string関数を使用した方が良いという記述は拝見しました。 やはりaddslashes関数には脆弱性があるのですね。 参考になりました。

関連するQ&A

専門家に質問してみよう