• Авторизация


Безопасное программирование 26-01-2005 17:10 к комментариям - к полной версии - понравилось!


Любопытная статья, может пригодится
=> http://www.codenet.ru/webmast/php/Safe-Programming.php
Шаловливый_Ромео
вверх^ к полной версии понравилось! в evernote
Комментарии (4):
Статья любопытная. В частности я в упор не понял почему среди четырех способов проверки "авторизован ли пользователь" не предложили самого стнадартного - пользования сессией PHP? Зато подробно описали способ, которые фактически этот уже готовый механизм сессии подменяет :)
Еще постебаюсь :) Проверка реферера - это конечно иногда помогает, но как защита от хакеров? Ха-ха, это от каких хакеров такое поможет :))
И в регекспе проверки мыла у них вроде ошибка логическая - в мыле может быть знак "-".
Ну про хтмл-инжекшин я вообще молчу - товарищ поимел айпишники юзеров в чате - очень круто :)) А QUERY_STRING для своего сервера - он наверное миллионы на этой инфе заработал
Infant_terrible 27-01-2005-07:52 удалить
это уже, наверное, четвертая перепечатка, которую я втречаю в инете)
s-3-m 29-01-2005-03:42 удалить
Исходное сообщение Infant_terrible
это уже, наверное, четвертая перепечатка, которую я втречаю в инете)

Точняк =)
Scader 02-03-2005-02:26 удалить
маловато в статье реальной инфы на эту тему...все что приводиться, сущая ерунда..
sql_statement="select password from peoples
where name='$PHP_AUTH_USER'";
$result = mysql($dbname, $sql_statement);
$rpassword = mysql_result($result,0,'password');
$sql_statement = "select password('$PHP_AUTH_PW')";
$result = mysql($dbname, $sql_statement);
$password = mysql_result($result,0);
if ($password != $rpassword) {
Header("HTTP/1.0 401 Auth Required");
Header("WWW-authenticate: basic realm="My Realm"");
exit;
}

Упомянутая ошибка, между прочим, очень распространена среди начинающих и невнимательных программистов. Когда-то я сам поймался на эту удочку - по счастью, особого вреда это не принесло, не считая оставленных хакером в новостной ленте нескольких нецензурных фраз.

Итак, раскрываю секрет: допустим, хакер вводит заведомо несуществующее имя пользователя и пустой пароль. При этом в результате выборки из базы переменная $rpassword принимает пустое значение. А алгоритм шифрования паролей при помощи функции СУБД MySQL Password(), так же, впрочем, как и стандартный алгоритм Unix, при попытке шифрования пустого пароля возвращает пустое значение. В итоге - $password == $rpassword, условие выполняется и взломщик получает доступ к защищенной части приложения. Лечится это либо запрещением пустых паролей, либо, на мой взгляд, более правильный путь - вставкой следующего фрагмента кода:

if (mysql_numrows($result) != 1) {
Header("HTTP/1.0 401 Auth Required");
Header("WWW-authenticate: basic realm="My Realm"");
exit;
}


тут еще и SQL Injection есть) хы..


Комментарии (4): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Безопасное программирование | community_coding - Сообщество программистов | Лента друзей community_coding / Полная версия Добавить в друзья Страницы: раньше»