1

これが良い質問かどうかはわかりませんが、今日、私は多くの疑問を抱きました。そのため、以前と同じように基本的に時間とエスケープ値を節約するためにPHP関数を使用していましmysql_real_escape()たが、これを行うことは実際には危険であると言われました。これが私が行っていたことです。

function mysql_string_safe($stringtoclean)
{
    $safestring = mysqli_real_escape_string($GLOBALS['confDBLink'],$stringtoclean);
    return $safestring;
}

私は今疑問を持っています..これを行うことは実際にどのように安全ではない可能性がありますか?私がしているのは関数に値を送信してそれをエスケープすることだけなのでmysqli_real_escape_string?(そしてもちろん戻ってきました)それで、私が実際に値をエスケープしたいとき、私は次のことをします: mysql_string_safe($valuetoescape); 疑いのためだけでなく、私が言われたようにこれが本当に危険であるかどうかも知りたいので、私は本当に知りたいと思いました、次にこれをアプリケーションからも削除します。お時間をいただき、誠にありがとうございます。

4

3 に答える 3

4

それ自体は安全ではありませんが、入力を明示的にエスケープするよりも、プリペアドステートメント/バインディング値を使用することをお勧めします。後者は、いくつかの理由で潜在的に安全ではありません。

  • 入力をエスケープするのを忘れる可能性があります
  • 同じ入力を誤って2回エスケープする可能性があります
于 2012-10-30T22:40:10.463 に答える
1

これを言った人は誰でも、あなたが呼び出す関数を持っているというmysql_real_escape_string()事実ではなく、mysql_*関数をまったく使用しているという事実に言及していると思います。これらの関数を使用すべきでない理由を説明するこのメッセージのバリエーションを見たことがあるかもしれません。

mysql_*新しいコードで関数を使用しないでください。それらはもはや維持されておらず、非推奨プロセスが開始されています。赤いボックスがか?代わりにプリペアドステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事はどちらを決定するのに役立ちます。PDOを選択した場合は、ここに優れたチュートリアルがあります。

于 2012-10-30T22:41:16.447 に答える
0

システムのどれだけがすでにmysqliを使用しているかに応じて、PDOに切り替えます。

$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->bindValue(':username', $_POST['username']);
$stmt->execute();

$row = $stmt->fetch();

図のように値をバインドすることにより、PDOは文字のエスケープを処理します。これは一般に、PHPを使用してデータベースと対話するための改善された方法と考えられています。これについては、http: //php.net/manual/en/book.pdo.phpで読むことができます。

これはあなたの質問に厳密に答えるものではないことを私は知っています、これはまったく別の解決策が役立つかもしれない場合だと思います。

于 2012-10-30T22:49:26.230 に答える