私は新しいメールフォームを書いています。私はここにいくつかの良い人々によって提案されたものを実装していますので、後者で成功したかどうかはわかりませんが、私は古いMySQL APIに悩まされていると考えています。私は理由を説明しなければならないように感じる。これは、サイト全体がmysqlを使用しており、少なくとも今のところはPDOに切り替える時間がないからです。安全なログインフォーム、または少なくとも私はそうだと思います
私は!preg_match
でパスワードを実行しませんでしたが、その入力が何らかの攻撃に対して脆弱なのかどうかはわかりません。私は!password_verify
を使用するときに座ってリラックスできるという感覚を得ました。
ログインフォームは、サインインしてニックネーム、メールアドレスとパスワードを使用しています
ここに私のコードです:。
if (@$_POST['login']) {
$nickname = mysql_real_escape_string($_POST['nickname']);
$email = $_POST['email'];
$password_input = $_POST['password'];
// validation 1 ------- //
else if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
$error = "Wrong nickname password or email.";
}
else if (!preg_match("/^[a-zA-Z0-9]{3,30}$/",$_POST['nickname'])) {
$error = "Wrong nickname password or email.";
}
// validation 2 ------- //
else { //password check
$password_query = mysql_query ("SELECT password FROM userbase WHERE email='$email' && nickname='$nickname'");
$password_actual = mysql_result ($password_query, 0);
if (!password_verify($password_input, $password_actual)) {
$error = "Wrong nickname, password or email.";
}
else {
LOGIN SUCCESSFUL
は、それがmysql_real_escape_string
でエスケープされます場合に必要$_POST['nickname']
ため!preg_match
ですか? (セキュリティバイス)
いいえ、必要ありません。 –
あなたのコードは、mysql_real_escape_stringでも、SQLインジェクションに対して非常に脆弱です。 PDOを使用することをお勧めします。 –
@CodeseeはOPの投稿のいくつかを読んでいます。彼は現時点でMySQL APIを変更する立場にはありません。 –