1

$stmt ->real_escape_string($password);mysqlインジェクションを防ぐために、このコードのどこに追加するのか疑問に思いました。

if ($stmt = $this->connect->prepare($sql)) {
  $stmt->bind_param('ss', $username, $password);
  $stmt->execute();
}

それはprepareステートメントの後ですか、それとも前ですか。エスケープする前に最初にconnectステートメントが必要であると読んだので、prepareステートメントの後になると思いますが、正しいですか?

そして、mysqlインジェクションについて他に何を知っておくべきですか?

4

1 に答える 1

4

あなたはそうしない。

プリペアドステートメントが行うことの一部は、データをエスケープすることです。したがって、パラメータとしてバインドしている場合は、何もエスケープする必要はありません。実際、追加すると、奇妙な場所に円記号などが表示されます。

を使用する必要があるreal_escape_stringのは、変数を値としてSQL文字列に直接挿入する場合のみです。そして、誰かがそれをしているなら、彼らは準備されたステートメントの全体のポイントの彼らの理解を再確認したいかもしれません。:)

于 2012-04-08T10:05:34.797 に答える