1

ログインフォームでは、クエリを実行する前にユーザー名とパスワードをハッシュします

... クラス ...

private $username;
private $password;
protected function Login(){
    $user = hash('sha256', $this->username);
    $pass = hash('sha256', $this->password);
    $this query = "..."
    ...
}

他の種類のフォーム (検索フォームなど) では、文字列を配列に変換してからクエリを実行すると、クエリは次のようになります。

$searchstring = explode(' ', $search);
//.... Some lines of PHP code... and the resulting query is: ...
$this->query = "SELECT... WHERE name LIKE 'DELETE%' OR name LIKE 'FROM%' ";
$this->query.= " OR name LIKE 'USERS%' OR name LIKE 'WHERE%' OR name LIKE '1%'";

SQLインジェクションを防ぐにはこれで十分ですか?ありがとう

4

3 に答える 3

5

SQL インジェクションを防ぐ自分の能力を信用しないでください。あなたよりも多くの優れた頭がそれに落ちました。

mysqli または PDO とパラメーター化されたクエリを使用します。これには、データベースがクエリ プランもキャッシュできるという副次的な利点があります。

于 2012-08-15T21:33:37.113 に答える
0

または、バイナリに変換することもできます:

function mssql_escape($data) {
    if(is_numeric($data))
        return $data;
    $unpacked = unpack('H*hex', $data);
    return '0x' . $unpacked['hex'];
}

...場合に備えて、mysqlデータベースにいない場合。

于 2012-08-16T00:28:55.200 に答える
0

コードをより安全にするために実行できる非常に簡単な手順がいくつかあります。

$query= mysqli_real_escape_string($database_connection, $user)

これにより、SQL 文字列に悪影響を与える可能性のある危険な文字がエスケープされます

$query = mysqli_real_escape_string($database_connection, trim($user))

このステップでは、SQL インジェクション攻撃を開始するために使用される空白を削除するトリム機能を追加しました。

詳細はこちら

于 2012-08-15T21:36:15.010 に答える