2

アカウント/パスワード入力ではなく検索入力があった場合、mysql_real_escape_string を使用する必要がありますか?
SQLインジェクションの可能性?? $sql は行を制限する場所を選択するだけです

<input type="text" name="search">

include"set.php";
$search=$_POST["search"];
if(strlen($search)) >= $min_length){
    $sql="select * from $tbl where subject or content like '%search%';";
    ..  
}

(mysql: 件名とコンテンツの両方が「テキスト」タイプ)


使用する必要がある場合は、これを試してみましたが、機能しません。

include"set.php";
$search=mysql_real_escape_string($_POST["search"]);
if(strlen($search)) >= $min_length){
    $sql="select * from $tbl where subject or content like '%search%';";
    ..
    if(mysql_num_rows($query)>0){
        while ($list= mysql_fetch_array($query)){
            $subject=$list[subject];
            $content=$list[content];
            $...=$list[...];
            print "subject: $subject, ....";
        }
    }
    else{
         print "no results";
    }
}
else{
print "minimum length is". $min_length;
}
4

3 に答える 3

3

エスケープしない準備済みステートメントを使用する必要があります(常にそうです)。

于 2012-10-09T08:32:53.390 に答える
1

A. PHP では大文字と小文字が区別される変数名であってはなり$_POSTません。$_post

B.代わりにmysqli_real_escape_stringmysql_**を使用する

PHPドキュメントから

この拡張機能の使用はお勧めできません。代わりに、MySQLi または PDO_MySQL 拡張機能を使用する必要があります。詳細については、MySQL: API ガイドの選択および関連する FAQ も参照してください。この機能の代替手段は次のとおりです。

C. $_GETURL を簡単に保存できるように、代わりに を使用して検索フォームを設計することを常にお勧めします。

$search = filter_var($_GET["search"], FILTER_SANITIZE_STRING , FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
if($search && strlen($search) > 3)
{
    $search = mysqli_real_escape_string($link, $search);
    $sql = sprintf("SSELECT * FROM %s where subject or content like '%s';",$tbl,"%s" . $search ."%s");
}

D. ユーザー入力を決して信頼せず、常に検証とフィルタリングを行う

于 2012-10-09T08:33:41.513 に答える
1

あなたが必要$_POST$search

$search=mysql_real_escape_string($_POST["search"]);

$sql="select * from $tbl where subject or content like '%".$search."%';";

はい、何があっても、ユーザーによる入力をエスケープする必要があるたびに。

于 2012-10-09T08:33:46.367 に答える