2010-08-05 3 views
0

Как обеспечить, чтобы злоумышленник или спамер не отправляли данные с компьютера http://localhost? Я разрабатываю приложение Flex/flash, которое затем отправляет данные на PHP. Я знаю, что у них есть возможность декомпилировать ActionScript, поможет ли HTTP_REFERER?php check form submit from url

ответ

0

Вы можете использовать referrer, но даже это может быть подделано. Если бы это был я, я бы sha1() какую-то случайную строку или что-то в вашей вспышке и передать это с вашей формой, то вы могли бы sha1() на стороне php и проверить их.

Может быть, вы могли бы даже сделать что-то динамичное, как

sha1(date('Y-m-d')."MySaltPhrase"); 
+0

если кто-то декомпилирует вспышку, то может ли она по-прежнему быть подделкой? – proyb3

+0

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

+0

Да, вы могли бы заменить его чем-то более динамичным, как я уже упоминал, если вы написали пользовательский алгоритм или что-то еще. Но вам понадобится то же самое и в Flash, и в PHP. Тогда вы можете изменить ключ на каждом представлении :) –

0

parse_url() в сочетании с манипуляциями со строк должны работать. Попробуйте это:

$url = parse_url($_SERVER['HTTP_REFERER']); 
$host = implode('.',array_slice(explode('.',$url['host']),-2)); 

if (strtolower($host) == 'google.com') { 
// code...... 
} 
+0

HTTP_REFERER можно установить вручную, поэтому ваше решение не является водонепроницаемым. – Deefjuh

+0

@ Deefjuh: Тогда? Каково ваше решение? – Sarfraz

1

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

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

Если вы беспокоитесь о ботах, используйте recaptcha или ограничьте количество представлений для любого IP-адреса адрес до 3 минут (в качестве примера - выберите подходящую скорость для вашей ситуации).

Вкратце: вы НИКОГДА не можете быть уверены, откуда возникла форма представления. Вы должны быть готовы иметь дело с сообщениями от злоумышленников.

+0

Я сделал все это. Но помогает ли SSL? – proyb3

+0

Если вы сделали все это, что вас беспокоит? Какую атаку вы считаете уязвимой? –

0

использование CAPTCHA для проверки. вы не можете определить, является ли источник или реферер локальным хостом или публичным IP-адресом при отправке формы. localhost, который вы увидите, является вашим собственным.

0

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

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

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