Acunetix Web Vulnerability Scanner 8 でサイトをテストすると、登録ページに 2 つの SQL インジェクションがあるとのことです
URL エンコードされた POST 入力メールは 1##xa7## に設定されました URL エンコードされた POST 入力ユーザー名は 1##xa7## に設定されました
エラー メッセージが見つかりました: 指定された引数は有効な MySQL 結果ではありません
これら2つのPHPコード
$username = mysql_real_escape_string(trim($_POST['username']));
$email = mysql_real_escape_string(trim($_POST['email']));
if ($username==!preg_match('/^[a-zA-Z0-9._]+$/', $username)){
$error_stat = 1;
$message_error .= 'Error:invalid username.';
}
elseif (!filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL)) {
$error_stat = 11;
$message_error .= 'Error:invalid email.';
}
これがSQLインジェクションに対してどのように脆弱になる可能性があるか
@ペッカ
$checkusername = mysql_query("SELECT Username FROM users WHERE Username = '$username'");
$checkemail = mysql_query("SELECT EmailAddress FROM users WHERE EmailAddress = '$email'");
$username_exist = mysql_num_rows($checkusername);
$email_exist = mysql_num_rows($checkemail);
エラーを表示するためにそれらのいずれかが存在する場合:
<?php if ($error_stat > 0){ echo $message_error; }?>
エラーがない場合
$registerquery = mysql_query("INSERT INTO users (Username, password, EmailAddress,Activation,registered) VALUES('".$username."', '".$password."', '".$email."','".$activation."','".$date."')");
編集 //
だからみんな私は PDO で別のページを作成し、新しいエラーは次のとおりです。
SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
これは、[Launch the attack with HTTP Editor] をクリックしたときに Acunetix が表示するものです。プログラムで使用されるユーザー名は次のとおりです。1%c0%00xa7%c0a2
PDO
プログラムでは、ユーザー名は = 1%c0%00xa7%c0a2 で、エラーは 32 行目にあります
line 30 $getMail = $dbh->prepare("SELECT EmailAddress FROM users WHERE username = :username");
line 31 $getMail->bindParam(':username', $username);
line 32 $getMail->execute();
line 33 $rowMail = $getMail->fetch();
line 34 $email = $rowMail['emailaddress'];