2

重複の可能性:
PHPでSQLインジェクションを防ぐための最良の方法

SQLインジェクションについて疑問に思っており、mysqli_real_escape_stringをいつ使用するかを知りたいです。

クエリにWHERE句があるたびに使用する必要がありますか?

4

3 に答える 3

3

ユーザーからのデータまたは信頼できないデータには、mysqli_real_escape_string を使用する必要があります。

于 2012-07-25T15:23:43.690 に答える
0

クエリに$_REQUEST"vars"を含める場合は、これを使用する必要があります。

 $query = "UPDATE foo set bar = '{$_GET['var']}' ..."

 $query = "INSERT INTO foo ('{$_POST['var']}',) ..."

 $query = "SELECT bla from foo WHERE bar = '{$_COOKIE['var']}'"

インジェクションを提供するには、この各クエリはmysqli_real_escape_stringである必要があります...

于 2012-07-25T15:25:54.157 に答える
0

またはそのバリエーションを使用mysqli_real_escape_stringして、ユーザー入力フィールドからのデータが適切にエスケープされるようにします。

たとえば、いくつかの入力があるフォームがあるとします。[送信] をクリックすると、データがリクエストとして PHP スクリプトに送信されます。スクリプトでは、ユーザーが投稿した値をデータベースに挿入します。

たとえば、ユーザーがログイン時に入力フィールドに次のように入力したとします。

' WHERE `username` = {x} AND password > 1;

その人物が、作業中のテーブルのすべてのデータを持っている可能性があります。使用:

mysqli_real_escape_string($input)

上記は次のようになります。

\' WHERE `username` = {x} AND password > 1;

' のエスケープ文字列は、SQL インジェクション攻撃の可能性を阻止します。

つまり、PDO とバインドされたパラメーターを使用する必要がある理由はありませんmysqli_real_escape_string()。さまざまな SQL 攻撃/注入方法のホストをそらすのにはるかに優れています。それを学び、それを使用してください!

コメントのため編集

%また_、それ以上の特別な扱いが必要になりますmysqli_real_escape_string()

function escape_extra_chars ( $string )
{
    $string = preg_replace("/\%/", "\%", $string);
    $string = preg_replace("/\_/", "\_", $string);

    return $string;
}

とにかくそれらの線に沿って(その機能はテストされていません)

于 2012-07-25T15:30:52.920 に答える