Контроль данных из формы

Статус
В этой теме нельзя размещать новые ответы.

ForJest

- свежая кровь
...который можно имитировать серверным скриптом, не так ли? Причем необязательные заголовки, к числу которых относится HTTP_REFERER, можно подставить любые. Таким образом сервер подумает, что данные прислал браузер пользователя, а на деле их прислал сервер хакера Васи.
А кто пустит хаккера Васю за компьютер пользователя? Может быть Васе далеко ехать и довольно удобно сидеть за своей тачкой, не находишь? :)
 

Romantik

TeaM PHPClub
Я верю, что нужно проверять HTTP_REFERER и ставить себе Kerio Firewall, чтобы не подстрять на тех серверах, где этого не делают!
 

Фанат

oncle terrible
Команда форума
IL78
Даже я уже понял.
Хакер НЕ МОЖЕТ имитировать ничего сокетом.
потому, что фишка в том, что отсылка идет из браузера пользователя.
 

KR

alive in new life
IL78, для тех, кто в танке.

Серверным скриптом ты можешь сэмитировать данные, НО, ты уже не будешь авторизованным пользователем, потому что у тебя не будет той самой заветной куки, с помощью которой можно добавить новый пост в форум.

Другое дело, что ты можешь узнать имя той самой заветной куки, и сформировать полностью корректный HTTP запрос, НО либо это будет уже запрос от твоего имени, т.е. с твоим логином, либо тебе придется предварительно узнать логин/пароль того самого Пети, от имени которого, ты такой нехороший, собрался постить в форум.
 

lovchy

nacido para cifrar
Поэтому есть ещё один вариант -- скриптом с сервера проникнуть в машину заветного Пети, украсть куку и удалённо отослать кривой реферер. А ещё надо руки мыть перед едой.

ForJest, поставь gecko-браузер и забудь про критические дни.
 

IL78

Guest
Фанат, KR,

но ведь страница, на которую ведет обманная ссылка, открывается именно в браузере пользователя!

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

Куку теоретически можно перехватить javascript'ом... или нет?

Где ошибка в моих рассуждениях?
 

KR

alive in new life
IL78, а вот как раз тут ты ошибаешься, поскольку кука ставится на конкретное доменное имя, а доменное имя твоего сервера с вероятностью 100% будет отличаться от доменного имени форума, поэтому браузер просто не передаст тебе (а точнее твоему серверу) заветную куку...

... ну если ты конечно не пропатчишь браузер бедного Пети.
 

ForJest

- свежая кровь
IL78
У тебя ошибка в том, что ты думаешь, что в моём скрипте что-то делается. А там чистый html.
 

lovchy

nacido para cifrar
ИЛ78, сокет отрабатывает сервер. Клиент получает уже html. В на танке?
 

McLay

PHP5 BetaTeam
Я верю, что нужно проверять HTTP_REFERER и ставить себе Kerio Firewall, чтобы не подстрять на тех серверах, где этого не делают! ForJest - я с тобой, да! Пусть разум будет посрамлён,.. ДИСКОТЕКА! :););D

-~{}~ 09.08.04 16:25:

Ловко :)
 

IL78

Guest
мнда... с кукой я малость заврался, виноват....

ForJest, дело в том, что я как раз раздумывал над вариантом, если бы вместо твоего чистого htmlя (точнее, почти чистого javascript) был бы скрипт, в котором что-то бы делалось. Я и хотел разобраться, что такой скрипт смог бы сделать, а что нет.
 

Фанат

oncle terrible
Команда форума
хорош уже тратить топики на с ила. он сам со временем поймет, если остановится тупить на форуме и подумает головой немножко.

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

KR

alive in new life
Я верю, что нужно проверять HTTP_REFERER и ставить себе Kerio Firewall, чтобы не подстрять на тех серверах, где этого не делают!

хы %)
я действительно верю.

-~{}~ 09.08.04 16:38:

Честно говоря мне не ясна ситуация при которой нечто может резать реферера, точнее мне она кажется не правильной.

Но как вариант можно использовать свой заголовок вместо реферера.
Для случая первого захода на страницу редирект на самого себя с нужным заголовком.

Пока это только идея. Хочу услышать мнения по этому поводу.
 

ForJest

- свежая кровь
Фанат
Рефер как раз панацея. Мне уже правда надоело об этом говорить - никто не хочет верить :)
--------------

патч для
PHP:
if ((isset($_POST) || isset($_GET)) && isset($_SERVER['HTTP_REFERER']) 
&& strlen($_SERVER['HTTP_REFERER'])) 
{ 
     $refer = parse_url($_SERVER['HTTP_REFERER']); 
     if (FALSE === strpos($refer['host'], $_SERVER['SERVER_NAME']) and 
         FALSE === strpos($refer['host'], $_SERVER['HTTP_HOST'])) 
     { 
          die('Invalid ref!'); 
     } 
}
проверено и работает.
Скрипты для проверки:
service.com/test_ref.php
PHP:
<?php
session_start();
if (isset($_GET['user']))
{
     $_SESSION['user'] = $_GET['user'];
     header('Location: '.$_SERVER['SCRIPT_NAME']);
}
if (!isset($_SESSION['user']))
{
     die('No autorization');
}
if ((isset($_POST) || isset($_GET)) && isset($_SERVER['HTTP_REFERER']) 
&& strlen($_SERVER['HTTP_REFERER']))
{
     $refer = parse_url($_SERVER['HTTP_REFERER']);
     if (FALSE === strpos($refer['host'], $_SERVER['SERVER_NAME']) and
         FALSE === strpos($refer['host'], $_SERVER['HTTP_HOST']))
     {
          die('Invalid ref!');
     }
}
if (isset($_POST['message']))
{
     echo $_SESSION['user'].' said: '.$_POST['message'];
}
?>
<a href='http://test/ref.php'>Click Here!</a>
index.php
PHP:
<a href='http://service.com/test_ref.php'>Test</test>
hack.net
PHP:
<form method='POST' action='http://service.com/ref_test.php'>
<input type='hidden' name='message' value='Fucking HTTP_REFERER!'>
</form>
<script language='JavaScript'>
document.forms[0].submit();
</script>
-~{}~ 09.08.04 15:42:

KR
Если что-то режет рефер оно обычно режет и куки при редиректе. У меня при включенном Kerio вылетает No autorization.
Если же нечто будет резать рефер и не резать куку - нафих такое нечто нужно?
 

Фанат

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

McLay

PHP5 BetaTeam
Фанат
Проверять рефер, если я правильно понял, имеет смысл только когда авторизация происходит с помощью кук. У кого режет рефер могут пользоваться сессиями.
 

Фанат

oncle terrible
Команда форума
даже отвечать не буду. чтобы совсем уж в степь тему не уводить
 

KR

alive in new life
ForJest, мы говорим о каком то конкретом случае для какой-то конкретной настройки фаервола или все-таки пытаемся выработать более-менее универсальное решение?

я его пока не вижу.

скорее всего это будет какая-то комплексная защита, если вообще будет ...
 

ForJest

- свежая кровь
Ладно. Короче этим трэдом я надеялся доказать, что проверка HTTP_REFERER является средством защиты пользователя от надстроек над приложением которые производить злоумышленник. При некоторых условиях это решение не работает. Но это не повод его не применять.
-------------------
Что я ещё могу сказать? ПРОВЕРЯЙТЕ HTTP_REFERER
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху