|
|
|
| Я начинающий, если можно так сказать программист ) И до поры до времени пользовалась подобным вариантом:
mysql_query("SELECT user, password FROM userlist WHERE user = '$login' AND password = '$password'")...
|
Почитала задачки про инъекции. Поняла, что при таком варианте очень все легко взламывается, если не ставить соответствующую защиту.
Но вот наткнулась на еще один вариант. Принцип такой:
$login;
$password;
$sql_result = mysql_query("SELECT user, password FROM userslist");
$num_row=mysql_num_rows($sql_result);
while($row = mysql_fetch_object($sql_result))
{
if($login == '$row->user' AND $password == '$row->password')
{
user_access = 1;
break;
}
}
|
Хотелось узнать, на сколько второй вариан защищен? Возможны ли для второго варианта инъекции? И какой из вариантов луше использовать? | |
|
|
|
|
|
|
|
для: La Estafa
(09.04.2007 в 16:31)
| | если у вас будет 200, 500 юзеров в таблице, то уже будет не до инъекций.
лучше пользоваться сторонними библиотеками типа sql_placeholder | |
|
|
|
|
|
|
|
для: RV
(09.04.2007 в 16:39)
| | Я рассматриваю этот вариант под систему администрирования.. т.е. под отдельную таблицу именно для системы администрировая, куда доступ будут иметь в худшем случае человек 10-15. | |
|
|
|
|
|
|
|
для: La Estafa
(09.04.2007 в 16:46)
| | тогда сойдет | |
|
|
|
|
|
|
|
для: RV
(09.04.2007 в 16:51)
| | RV , спасибки ) | |
|
|
|
|
|
|
|
для: La Estafa
(09.04.2007 в 16:31)
| | такой вариант работать не будет.
Почитайте про функции get_magic_quotes_gpc(), strip_slashes(), и mysql_escape_string().
Последняя используется для того, чтобы писать запросы, которые было бы в принципе невозможно подвергнуть SQL-инъекции. Первые две - к сожалению, они тоже нужны - для того, чтобы исправить ошибки тех, кто решил бороться с инъекциями методом крестовых походов. | |
|
|
|
|
|
|
|
для: Trianon
(09.04.2007 в 21:20)
| | Trianon , sms-send
Я писала грубый код, без предварительной обработки, скажем так, это попросту алгоритм... точно так же, как и во втором варианте не плохо было бы изначально написать:
Во втором варианте переменные сравниваются не в запросе к базе данных. Я вопрос задала потому, что может быть по незнанию что-то могла пропустить или еще как-то.. и может ли вообще такое быть, потому как я сама еще не все знаю... даже, скажем так, мало чего знаю, только и всего... на данный момент мне важна система безопасности системы при работе со вторым вариантом, по скольку при малом количесте потенциальных пользователей она мне кажется более защищенной даже без применения того, что вы перечислили. | |
|
|
|
|
|
|
|
для: La Estafa
(09.04.2007 в 16:31)
| | Другими словами
mysql_query('SELECT user, password FROM userlist WHERE user = '.mysql_escape_string($login).' AND password = '.mysql_escape_string($password));
| - вполне надёжно | |
|
|
|
|
|
|
|
для: sms-send
(10.04.2007 в 00:38)
| | >при работе со вторым вариантом, по скольку при малом количесте потенциальных пользователей она мне кажется более защищенной даже без применения того, что вы перечислили.
Только кажется. Есть способы гораздо проще и функциональней, при этом, не уступающие в защищённости:
<?php
function check_login($login,$password){
$q=mysql_query('SELECT `password` FROM `userlist` WHERE `user`="'.mysql_escape_string($login).'" LIMIT 1;');
if(mysql_num_rows($q)==0)return 'Нет такого пользователя.';
if(mysql_result($q,0)!==$password)return 'Неверный пароль.';
return 'Авторизация прошла успешно.';
}
$message=check_login($login,$password);
echo $message;
?>
|
| |
|
|
|
|
|
|
|
для: sms-send
(10.04.2007 в 03:51)
| | Этот способ недопустим.
Вы видели хотя бы одну априори авторитетную систему, выдающую сообщение "Неверный пароль"? Такие сообщения выдаваться не должны. | |
|
|
|
|
|
|
|
для: Trianon
(10.04.2007 в 09:59)
| | Согласен! Авторитетная система должна говорить: "У вас ошибка в третьем и пятом символах пароля".
Честно-честно! Я в кино видел:) | |
|
|
|
|
|
|
|
для: Loki
(10.04.2007 в 11:58)
| | Тогда уж так: Ошибка в пароле: поменяйте местами третий и пятый символы. | |
|
|
|
|
|
|
|
для: Trianon
(10.04.2007 в 09:59)
| | >Этот способ недопустим.
>Вы видели хотя бы одну априори авторитетную систему, выдающую сообщение "Неверный пароль"? Такие сообщения выдаваться не должны.
Я написал пример определения ситуации. А выдавать или не выдавать, это не моё дело. Я, к примеру, при неверном пароле заношу IP-адрес в базу и, если в течение 15 минут совершается более 5 попыток входа с неверным паролем, IP добавляется в бан лист на полчаса. | |
|
|
|