|
|
|
|
|
для: OZ_
(26.10.2005 в 08:28)
| | О чем вы спорите? Хотите уличить авторов в чем то?
Есть неточности - их нужно поправить.
Иногда быват случае, когда учасник спрашивает: "а как меня могу взломать", то не куда было и "тыкнуть", а с этой статьей есть куда "посылать", с такими вопросами.
Далее считаю спор бессмысленым. | |
|
|
|
|
|
|
|
для: Artem S.
(26.10.2005 в 08:13)
| | Лишь бы у взломщиков ваш код не вызвал улыбку :) А так - улыбайтесь хоть 24 часа в сутки :)))))))
>3.
>Про sql инъекцию, разказываеться ниже.
Про них рассказывается выше, а не ниже. в этом вся ирония.
>1.
>В чате можно послать ссылку на http://site.ru?username="><script>alert('test')</script>
>и закодировать ее через urlencode, так что ты не сразу поймешь в чем подвох.
Я сказал, что неточность в примере, а не в теории, которую он до нас доносит.
>2.
>Да есть такое, что некоторые firewall'ы блокируют HTTP_REFERER, но их мало, к тому же для >них не доступно будет лишь отправка формы, а не весь сайт.
Может их и мало, но с каждым днём всё больше браузеров, которые предлагают не отправлять рефереры.
>Не нужно применять addslashes для переменных, которые не участвуют в sql запросах
Погорячился, признаю. Просто часто вижу здесь (от участников) дырявые куски кодов.
>Я допустим делаю провеку по рег. выражению, так что кроме букв и цифр писать ничего нельзя, >и проблем с magic_quotes нет, потому что кавычек нет вообще.
А если пользователю нужно ввести текст "о себе"?
>Тип переменных переданных через POST всегда string, если вы не знали.
Да и от GET тоже. Но фишка в том, что string редко требуется, и часто переменную от пользователя безопаснее перевести в число. | |
|
|
|
|
|
|
|
для: OZ_
(26.10.2005 в 06:01)
| | 1.
В чате можно послать ссылку на http://site.ru?username="><script>alert('test')</script>
и закодировать ее через urlencode, так что ты не сразу поймешь в чем подвох.
2.
Да есть такое, что некоторые firewall'ы блокируют HTTP_REFERER, но их мало, к тому же для них не доступно будет лишь отправка формы, а не весь сайт.
3.
Про sql инъекцию, разказываеться ниже. Было показано для чего не нужно было использовать mysql_num_rows(). Если все сразу писать про addslashes, нужно будит упоминуть про get_magic_quotes_gpc, и тогда код будит выглядет так
<?
$sql = "SELECT user, pass FROM users WHERE user = '$user'";
list($m_user, $m_pass) =
if( get_magic_quotes_gpc() )
{
$user = $_POST['user'];
$pass = $_POST['pass'];
}
else
{
$user = addslashes($_POST['user']);
$pass =addslashes($_POST['pass']);
}
$sql = "SELECT user, pass FROM users WHERE user = '$user'";
list($m_user, $m_pass) = mysql_fetch_row( mysql_query($sql) );
|
Код грамозк, сразу возникает вопрос что такое get_magic_quotes_gpc() и т.д., а смысл был лишь показать сам принцип.
>> Используйте addslashes! ВСЕГДА проверяйте типы и размеры переменных, переданных пользователем.
У меня вызывает улыбку. Тип переменных переданных через POST всегда string, если вы не знали. На счет всегда. Не нужно применять addslashes для переменных, которые не участвуют в sql запросах, иначе нужно сделать stripslahses для возврата переменных в форму в случае ошибки.
Я допустим делаю провеку по рег. выражению, так что кроме букв и цифр писать ничего нельзя, и проблем с magic_quotes нет, потому что кавычек нет вообще. | |
|
|
|
|
|
|
|
для: PantiL
(26.10.2005 в 00:02)
| | В статье неточность:
<input name="username" value="<? echo $_GET['username'] ?>">
|
Данный код не причиняет вреда, а лишь демонстрирует уязвимость XSS, отображая ваши cookie. Следует помнить, что код может быть другим, более опасным и, будучи оставленным, например, в сообщении гостевой книги будет запускаться на машине каждого из посетителей гостевой книги.
Следуя логике примера: тот, кто геморойное выражение введёт, у того на машине оно и выполнится. А в скрипт эта ерунда не запишется.
Следущее:
Злоумышленник может загрузить страницу с формой добавления сообщения к себе на локальный компьютер и добавить несколько сотен сообщений в гостевую книгу или форум. Для предотвращения такого вида атак существует два метода борьбы.
Проверка элемента суперглобального массива $_SERVER['REFERRER'] на предмет содержания в нём адреса исходного сайта, позволяет устранить данный вид атаки
REFERRER в браузере можно вообще запретить передавать - для пользователей, которые так сделают, сайт с такой "защитой" будет выглядеть недружелюбно, мягко говоря.
Потом:
1. Не используйте проверку на возращение строки (mysql_num_rows()), а применяйте следующий подход:
$user = $_POST['user'];
$pass = $_POST['pass'];
$sql = "SELECT user, pass FROM users WHERE user = '$user'";
list($m_user, $m_pass) =
| ...
Тут можно элементарно инъекцию всунуть, советчики.
Используйте addslashes! ВСЕГДА проверяйте типы и размеры переменных, переданных пользователем. Даже если скрипт написан исключительно для админа. Его (любого скрипта) имя узнать не так уж сложно. | |
|
|
|
|
|
|
|
| Кто знает расскажите о XSS. Как и где его применяют.
Или где можно поподробней об этом прочитать. | |
|
|
|
|