2

オンラインで見つけたログイン スクリプトで、作成者は SQL インジェクション攻撃を防ぐためにこの関数を追加しました。

function Fix($str) {
    $str = trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}

削除された (または削除された)と読んだのでmagic_quotes_gpc、この関数は少し時代遅れのように感じます。単に使用するだけでmysqli_real_escape_string($user_input)十分なセキュリティが追加されるのではないでしょうか?

4

2 に答える 2

2

mysql_real_escape_stringすべての状況で十分ではありませんが、それは間違いなくとても良い友達です。より良い解決策は、プリペアドステートメントを使用することです

//example from http://php.net/manual/en/pdo.prepared-statements.php

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

また、無効/疑わしい文字を破棄するために使用できるHTMLPurifierを忘れないでください。

mysql_real_escape_string()とプリペアドステートメント

mysql_real_escape_string()に影響を与える同じ種類の問題が発生する傾向があります addslashes()

Chris Shiflett(セキュリティエキスパート)からの回答

于 2012-06-14T07:00:22.573 に答える
1

magic_quotes_gpcは 5.3 で廃止され、5.4 で削除されました。コードが配布を目的としている場合 (つまり、コードが使用される環境を制御できない場合)、マジック クォートを有効にして 5.3 で実行される可能性を考慮することをお勧めします。これが内部アプリケーションであり、環境を制御しており、マジック クォートが無効になっていることがわかっている場合は、それらを確認する必要はありません。

于 2012-06-14T07:00:33.713 に答える