|
|
|
| $result = DB::query("SELECT pass FROM webchat_users WHERE name = '".$name."'");
if($result->num_rows > 0){
$passdb = $result->fetch_object();
if ($passdb['pass'] != $pass) {
throw new Exception('Неверный пароль');
}
Является ли этот код верным? $name и $pass мы получаем от пользователя. Больше интересует вопрос о правильности выборки одного значения из БД, присвоение его к переменной и сравнение | |
|
|
|
|
|
|
|
для: Abrakadabra
(16.02.2012 в 22:15)
| | Данные в $name подвергаются экранированию перед тем, как войти в состав SQL-запроса? | |
|
|
|
|
|
|
|
для: cheops
(16.02.2012 в 23:09)
| | да, если выделять тут текст - то заметно что идет двойная и одинарная кавычки | |
|
|
|
|
|
|
|
для: Abrakadabra
(16.02.2012 в 23:18)
| | Имеется в виду не кавычки в запросе, а кавычки внутри переменной $name, если пользователь введет в качестве имени
anyname' OR 1 = 1 UNION SELECT 1 FROM webchat_users ORDER BY pass --'
| , а в качестве пароля 1, ваш скрипт как отреагирует (я не проверял SQL-инъекцию, это просто демонстрация, есть ли от неё защита)? | |
|
|
|
|
|
|
|
для: cheops
(16.02.2012 в 23:26)
| | простите, неправильно понял.
нет никакой обработки переменных нет | |
|
|
|
|
|
|
|
для: Abrakadabra
(17.02.2012 в 01:47)
| | Тогда в первую очередь нужно защититься от подобных манипуляций, путем экранирования кавычек, например, при помощи функции mysql_escape_string().
PS Только нужно быть осторожным на серверах, где включен режим автоматического экранирования кавычек (так называемый режим "магических кавычек"). | |
|
|
|