В настоящее время у меня есть этот код PHP для аутентификации, и я хотел бы выяснить, уязвим ли он для инъекции MySQL. В частности, если кто-то может вернуть поддельные данные с помощью UNION или другой атаки и, следовательно, подделать логин. В настоящее время я использую mysqli_real_escape_string, чтобы попытаться предотвратить тривиальные атаки, а также попытаться очистить запрос. Тем не менее, является ли этот код совершенно безопасным из-за использования mysqli_real_escape_string или есть недостатки безопасности?
$email = mysqli_real_escape_string($database_connection, $_POST["email"]);
$pass = mysqli_real_escape_string($database_connection, $_POST["pass"]);
$query = "SELECT * FROM auths WHERE email='$email' AND pass='$pass'";
$query_result = mysqli_query($database_connection, $query);
if(mysqli_num_rows($query_result) === 1)
{
// User is logged in.
}
else
{
die("Unauthorized");
}
забывать mysqli_real_escape_string
, Просто использовать готовые заявления
$conn = new mysqli('host', 'user', 'pass', 'database');
$stmt = $conn->prepare('select * from auths where email=? and pass=?');
$stmt->bind_param('ss', $_POST['email'], $_POST['pass']);
$stmt->execute();
if($stmt->num_rows > 0):
//user is logged in
else:
die('Unauthorized');
endif;
Других решений пока нет …