-2

重複の可能性:
mysql_real_escape_string() と mysql_escape_string() はアプリのセキュリティに十分ですか?

だから基本的に私はURLにqryNameを持っています

例: mysite.com/qryName=WHAT

if (isset($_GET['qryName']))
{
    $qryName = mysql_real_escape_string(filter($_GET['qryName']));
}

$urldata = mysql_fetch_assoc(mysql_query("SELECT * FROM gangs WHERE ShortName = '" . $qryName . "' LIMIT 1"));

$urldata はコードなので、ほとんどデータベースから選択します。データベースでは、qryName にスペースや特殊文字などがないことに注意してください。

それが悪用可能かどうか疑問に思っていますか?

4

3 に答える 3

1

PDOのようなものを使用することを検討しましたか? 私の理解では、PDO とバインドされた変数を使用する場合、SQL インジェクションは不可能です。他にも考慮に値する利点があります。

同様の PDO クエリは次のようになります。

    $data=array($_GET['qryName']);
    try {
        $STH = $this->DBH->prepare('SELECT * FROM gangs WHERE ShortName = ? LIMIT 1');
        $STH->execute($data);
        while($row = $STH->fetch()) {
                $var1=$row->FieldName;
        }
    }
    catch(PDOException $e) {echo $e->getMessage();}

変数を配列 ($data) に追加すると、変数は SQL ステートメントの各疑問符に順番にバインドされます。

于 2012-05-11T14:28:26.753 に答える
1

検証を1つ追加するか、issetを取り出して、たとえば文字のみが含まれているかどうかを確認してみませんか

if(ctype_alpha($_GET['qryName'])) {

    $qryName = mysql_real_escape_string(filter($_GET['qryName']));

}

http://php.net/manual/en/function.ctype-alpha.php

于 2012-05-11T14:31:39.697 に答える
1

値を適切にエスケープするので安全です - ない限り....

...変数register_globals初期化せず、有効にしています。$qryNameその場合、誰かが Cookie または POST 値を使用して、悪意のある SQL ステートメントを含む任意の値を送信できます。

しかし、おそらくスニップを投稿したばかりで、そのステートメントの前に変数を初期化するので(そうifですよね?!)、コードは安全です。ただし、エスケープする代わりに、準備済みステートメント (PDO を使用) を使用することを検討してください。これにより、コードが読みやすくなります。

于 2012-05-11T14:26:01.600 に答える