Не могу войти в мой сайт с mysql_real_escape_string

Мне нужно немного помощи здесь. Я кодировал какой-то сайт с помощью системы «логин» и пытаюсь предотвратить инъекции SQL. Все работает просто отлично без этой цепочки. Когда я добавляю в mysql_real_escape_string () я не могу войти в свой сайт больше, и это раздражает.

Я понятия не имел, что должно быть не так, пытался решить проблему, но ничего не нашел. Итак, у меня есть форма, которая отправляет информацию о пользователе через $ _POST [‘user’] и $ _POST [‘pass’] в check.php. В check.php у меня есть код, чтобы проверить, равен ли user и pass пользователю и pass в БД MySQL.

<?php
include ('mysql.php'); // includes mysql connection
if(isset($_POST['user']) && isset($_POST['pass'])) {
$user = mysql_real_escape_string($_POST['user']);
$pass = mysql_real_escape_string($_POST['pass']);
$row = mysql_fetch_row(mysql_query("SELECT * FROM users WHERE username = '$user'"));

if(($user == $row[1]) and ($pass == $row[2])) {
setcookie("user",$user,time() + 3600,"/");
header('location: secret.php');
} else {
header('location: index.php');
};
};

Имена пользователей и пароли содержат только буквы и цифры, и я знаю, что правильно набираю имя пользователя и пароль.

0

Решение

Если имена пользователей и пароли содержат только буквенно-цифровые символы, попробуйте использовать
ctype_alnum (строка $ text) так что вы просто проверяете, являются ли $ user и $ pass только буквенно-цифровыми символами. Если они верны (если они вернули true), вам не нужно их дезинфицировать.

Кстати, теперь вы должны использовать
mysqli_real_escape_string вместо mysql_real_escape_string!
MySQL функции * устарели.

Надеюсь это поможет

Посмотрите на этот похожий вопрос, который был решен:
http://forums.phpfreaks.com/topic/68338-solved-cant-login-using-mysql-real-escape-string/

Редактировать: Кроме того, комментарий Фред-III-обеспечил вам хороший метод для отладки вашего кода.

2

Другие решения

Вам нужно только использовать mysql_real_escape_string на значения, которые будут включены в текст SQL.

например

$user = $_POST['user'];
$pass = $_POST['pass'];

$sql = "SELECT * FROM users WHERE username = '" . mysql_real_escape_string($user) . "'";

... mysql_query($sql) ...

Позже в вашем коде вы сравниваете содержимое $user к чему-то еще. Если $user содержит возвращаемое значение из mysql_real_escape_stringто, что вы сравниваете это должно также быть эквивалентно «экранированным» значением.

В качестве примера рассмотрим:

$bar = mysql_real_escape_string($foo);
if ( $bar == $foo ) {

В зависимости от стоимости $fooстрока хранится в $bar не может быть равным

Значение, возвращаемое из mysql_real_escape_string «экранирован», поэтому его можно включить в текст SQL.


Дополнительные примечания:

Хранить пароли в виде простого текста — очень плохая идея.

Не проверять ошибки, возвращенные из mysql_query плохая идея

Использование не рекомендуется mysql интерфейс, когда две подходящие замены (mysqli а также PDO) есть плохая идея. Особенно, когда обе замены поддерживают готовые заявления с связывать заполнители.

С помощью * в списке SELECT, а затем ссылки на столбцы, возвращаемые по положению столбцов в наборе результатов, также являются плохой идеей. Рекомендуется перечислить конкретные столбцы, которые вы хотите вернуть.

1

По вопросам рекламы [email protected]