0

フィルター $_GET 変数が mysql インジェクションを防ぐのに十分かどうかまだよくわからないため、この質問をしています。そのため、最初にフィルター関数があります

function filter_url($url)
{
  if (is_array($url))
  {
    foreach ($url as $key => $value)
    {
      // recurssion
      $url[$key] = filter_url($value);
    }
    return $url;
  }
  else
  {
    // remove everything except for a-ZA-Z0-9_.-&=
    $url = preg_replace('/[^a-zA-Z0-9_\.\-&=]/', '', $url);
    return $url;
  }
}

私は$_GET=filter_url($_GET);電話する前にいつも持っています

$filter_case =isset($_GET['product_ID'])?"and product_ID={$_GET['product_ID']}":"";

する必要があります$mysqli->real_escape_string($_GET['product_ID'])か? それでも暗示する必要がある場合、どのようなSQLインジェクションがクエリメソッドを乗り越えますか?

$mysqli->real_escape_string($_SESSION['member_ID'])その上、私が考えていることは重要ですか? 誰でも彼の$_SESSION 変数を操作できるのですか?

4

1 に答える 1

0

これは本質的に間違った質問です。

$mysqli->real_escape_string 文字列リテラルを SQL クエリに追加するときに必要です。このような場合、文字列のソースや検証に関係なく、この関数が必要です。それ以外の場合 (つまり、文字列がクエリに含まれていないか、SQL 文字列として含まれていない場合)、この関数はまったく役に立ちません。

これが、ネイティブまたはエミュレートされた準備済みステートメントを使用することが不可欠である理由です。

于 2013-08-07T12:56:50.440 に答える