4

ユーザー名とパスワードを使用してログインするための簡単なフォームがあります。ホワイトリストを適用して、特定の文字のみを許可したい。誰かがこれを必要としているかどうかはわかりませんが、ユーザー名とパスワードを取得するためのコードは次のとおりです。

$stmt = $conn2->prepare("SELECT username FROM users WHERE username = ? AND password = ?");

$stmt->bind_param("ss", $username, $password);      
$stmt->execute();
$stmt->store_result();

私はこのようなものを取り入れますか?

preg_replace( "/[^a-zA-Z0-9_]/", "", $stringToFilter );

もしそうなら、コード内のどこにそれを含めますか?また、ユーザーがホワイトリストにあるもの以外のものを入力しようとするとどうなりますか?

追加:登録中に、ユーザー名とパスワードを保存するためにINSERTを使用している場合はどうでしょうか。

//insert data
$stmt = $conn2->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");

//bind the parameters
$stmt->bind_param('sss', $username, $email, $password);
4

1 に答える 1

7

INSERT登録時の前にフィルタリング コードを追加します。"!!*&%$#()*&#$"のユーザー名が空白文字列として挿入されないように、フィルタリング後に文字列が空でないことを確認します。

$username_clean = preg_replace( "/[^a-zA-Z0-9_]/", "", $_POST['username'] );

if (!strlen($username_clean)){

    die("username is blank!");
}

$stmt = $conn2->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
$stmt->bind_param('sss', $username_clean, $email_clean, $password_clean);
于 2012-04-09T22:57:40.283 に答える