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

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

KR

alive in new life
ForJest, видимо ты меня не совсем правильно понял.

я имею ввиду, что реферер, точнее "адрес отправителя" однозначно нужо проверять, но если допускать, случай, что "адрес отпавителя" может быть пустым, то вся проверка смысла не имеет.

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

ForJest

- свежая кровь
Кстати решение есть. Но не очень простое в плане апдейта скриптов. В форме сабмита должен стоять
<input type='hidden' name='PHPSESSID' value='<?echo session_id?>'>
И всё. Если они совпадают - постим. Если нет - гуляй.

-~{}~ 09.08.04 16:07:

Дальше - больше. Представим себе ситуацию, когда у пользователя отключены куки. Соответственно по HTTP_REFERER злоумышленник узнаёт session_id. И подставляет его и в такое решение :).
 

Фанат

oncle terrible
Команда форума
подставлять в форму можно не сид, а нечто, записанное в сессию.

-~{}~ 09.08.04 17:18:

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

McLay

PHP5 BetaTeam
Автор оригинала: Фанат чтобы совсем уж в степь тему не уводить
И без тебя увели :)

ForJest
Дальше - больше. Представим себе ситуацию, когда у пользователя отключены куки. Соответственно по HTTP_REFERER злоумышленник узнаёт session_id. И подставляет его и в такое решение
Для форм можно использовать отдельное id, например случайное число, записав его в сессию.
 

ForJest

- свежая кровь
Ещё можно интересное решение. В таком же
<input type='hidden' name='post_certificate' value='что-то'>
На сервере сохраняется сертификат для поста. Допустим это хранится прямо в сессии - номер текущего сертификата. Или набор таких сертификатов :) Случайный чисел. После поста он проверяется и уничтожается.
----------
Проблема только в том, что если допустим quck form как здесь то этих чисел нагенериться очень много. По сути дела для каждой открытой страницы нужно подобную последовательность хранить, что вредным образом скажется на производительности системы.
-----------
Ещё можно сделать двухступенчатый пост. Т.е. с preview. Юзер сначала постит, потом подтверждает, что именно это он и хотел сделать. Но это плохо скажется на юзере и сделает систему более громоздкой :).
------------
Но такое решение можно применять по результатам тестов самой системы.
Т.е. - при входе система проверяет себя на дырявость с помощью дружественного хоста, после чего включает ту или иную меру защиты. Всё - пока больше идей нету :)
 

KR

alive in new life
Далее.
внедрять hidden переменную, значение которой меняется со временем (напр. сабмит формы возможен только в течение 10 минут после загрузки страницы) и уникально для каждого пользователя
если его (значение hidden переменной) подвязать на другие клиенские данные (чтобы максимально идентифицировать клиентский комп), получаемые напр. с помощью JS, то это еще усложнит задачу, хотя не намного.

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

ForJest

- свежая кровь
Фанат
Гы :).
Но для правки целой системы к примеру этого форума нужно будет упереться рогом и надолго. В том время как проверка реферера делается за пять минут :).
 

crocodile2u

http://vbolshov.org.ru
Forjest, я сходил по твоей ссылке два раза. Мой браузер (Mozilla) вроде ничего не отправил, но теперь я оценил твои слова! Да, товарищи, реферера стоит проверять!
:) Проверяйте рефереров!
 

ForJest

- свежая кровь
crocodile2u
Аргументы стали убедительны? :)
KR, Фанат
Да. Получается нужно просто хранить одно число, которое известно только странице, с которой проиводится пост. При создании дёшево и сердито. При переделке не менее сердито, но не дёшево :)

KR
А по времени таймаут бессмысленно, потому что я могу набирать довольно долго свой пост ^). А какую инфу зашить туда? Хотя да, с помощью JS - и этот JS ещё и закодировать!Тогда это будет вообще неполомаемо :)
 

Kirs

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

Забавно...
 

crocodile2u

http://vbolshov.org.ru
Originally posted by ForJest
crocodile2u
Аргументы стали убедительны? :)

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

codex

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

codex

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

-~{}~ 09.08.04 20:09:

да-да, я верю
 

SiMM

Новичок
Это не лишает возможности хацкеру подделывать HTTP_REFERER ;)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху