-3

私はSQLインジェクションを防ぐためにこの関数を使用しています:

function filter($input)
{
  if(strpos(str_replace("''","","$input"),"'") != false)
  {
    return str_replace("'", "''", $input);
  }
  return $input;
}

それを使用しても安全ですか?誰かが何とかそれをバイパスできますか? バイパスできる場合は、この機能を保護する方法のヒント、またはバイパスをどのように見るかの例を教えてください

UPDATE : SQL Server で使用されます

4

3 に答える 3

2

問題領域の専門家でない場合は、独自のセキュリティ ソリューションを発明しないでください。SQL インジェクションの詳細については、http://php.net/manual/en/security.database.sql-injection.phpを参照してください。

また、http://www.php.net/manual/en/book.pdo.phpおよびhttp://www.php.net/manual/en/pdo.prepare.phpで適切な防止策を使用してください

ツールが既にある場合は、独自のものを発明する必要はありません。

于 2013-04-07T10:47:41.770 に答える
0

それを使用しても安全ですか?

いいえ

誰かが何とかそれをバイパスできますか?

はい

  1. 決して入力フィルターであってはなりません。ただし、SQL クエリのデータ フォーマッタ。
  2. 少なくともそうでなければならない

    function SQLstrFormat($str)
    {
        return "'".str_replace("'", "''", $str)."'";
    }
    

このようにして、該当する場合は安全です。

于 2013-04-07T10:43:20.490 に答える
0
    function mysql_pre($value) {

            $magic_quotes_active = get_magic_quotes_gpc();
            $new_enough_php =      function_exists("mysql_real_escape_string(unescaped_string)"); //i.e. PHP >= v4.3.0

            if($new_enough_php) { //PHP v4.3.0 or higher
                //undo any magic quote effect so mysql_real_escape_string can do the work

                if($magic_quotes_active) {$value = stripslashes($value);}

                $value = mysql_real_escape_string($value);

            } else { //before PHP v4.3.0

                if(!$magic_quotes_active) {
                    $value = addslashes($value);
                }
            }
            return $value;
        }
于 2015-01-03T08:00:46.113 に答える