1

ユーザーが正しいログイン資格情報を入力すると、サイトにサインインする PHP スクリプトがあります。anything' OR 'x'='xしかし、パスワード ボックスに入力することで、このログインを簡単に挿入できることに気付きました。

どうすればこれを防ぐことができますか?

$query = "SELECT * FROM sm_editors WHERE email = '".$_POST['email']."' AND password = '".$_POST['password']."' AND user_type != 'reader-for-approval'";
4

4 に答える 4

2

これを防ぐには、まず入力をサニタイズする必要があります。

この関数mysql_real_escape_stringはエスケープ文字を削除します。

PHP でユーザー入力をサニタイズするための最良の方法は何ですか? をご覧ください。詳細については質問してください。

于 2013-02-23T13:31:34.317 に答える
0

クエリに渡すデータに対して mysql_real_escape_string 関数を使用するか、古い構文の代わりに準備済みステートメントとストアド プロシージャを使用できます。

于 2013-02-23T13:30:59.480 に答える
0
$query = "SELECT * FROM sm_editors WHERE email = '".mysql_real_escape_string($_POST['email'])."' AND password = '".mysql_real_escape_string($_POST['password'])."' AND user_type != 'reader-for-approval'";
于 2013-02-23T13:33:16.757 に答える
0

まず、mysql_real_escape_string を使用して文字列をエスケープできます。

しかし、より良い方法は、実行する前に SQL 文字列を準備することです。PHP PDO MySQL コネクタをご覧ください。文字列を準備する方法がいくつかあります。

$s = $pdo->prepare('SELECT * FROM table WHERE field1 = :value');
$s->execute(array(':value' => $value));

http://www.php.net/manual/de/pdo.prepared-statements.phpをご覧ください

于 2013-02-23T13:37:28.247 に答える