Как обеспечить, чтобы злоумышленник или спамер не отправляли данные с компьютера http://localhost? Я разрабатываю приложение Flex/flash, которое затем отправляет данные на PHP. Я знаю, что у них есть возможность декомпилировать ActionScript, поможет ли HTTP_REFERER?php check form submit from url
ответ
Вы можете использовать referrer, но даже это может быть подделано. Если бы это был я, я бы sha1()
какую-то случайную строку или что-то в вашей вспышке и передать это с вашей формой, то вы могли бы sha1()
на стороне php и проверить их.
Может быть, вы могли бы даже сделать что-то динамичное, как
sha1(date('Y-m-d')."MySaltPhrase");
parse_url()
в сочетании с манипуляциями со строк должны работать. Попробуйте это:
$url = parse_url($_SERVER['HTTP_REFERER']);
$host = implode('.',array_slice(explode('.',$url['host']),-2));
if (strtolower($host) == 'google.com') {
// code......
}
Не все браузеры поставлять HTTP_REFERER и его можно легко подделать, поэтому он не будет обеспечивать свою форму.
Лучшее, что вы можете сделать, и, действительно, единственное, что вы можете сделать, это убедиться, что ваш PHP-код не доверяет каким-либо данным. Вы должны проверить, что любые значения, представленные в вашей форме, находятся в допустимом диапазоне значений, дважды проверьте регистрационную информацию, если это необходимо, и т. Д.
Если вы беспокоитесь о ботах, используйте recaptcha или ограничьте количество представлений для любого IP-адреса адрес до 3 минут (в качестве примера - выберите подходящую скорость для вашей ситуации).
Вкратце: вы НИКОГДА не можете быть уверены, откуда возникла форма представления. Вы должны быть готовы иметь дело с сообщениями от злоумышленников.
Я сделал все это. Но помогает ли SSL? – proyb3
Если вы сделали все это, что вас беспокоит? Какую атаку вы считаете уязвимой? –
использование CAPTCHA для проверки. вы не можете определить, является ли источник или реферер локальным хостом или публичным IP-адресом при отправке формы. localhost, который вы увидите, является вашим собственным.
Ответ прост - вы не можете.
потому что каждая форма фактически отправляется с локального компьютера пользователя. это вещь HTML, и вам лучше это понять. сэкономит вам массу времени.
в целом вам вообще не нужна защита. но для некоторых частных случаев тактика защиты будет отличаться
- для предотвращения спама использовать капчу
- для предотвращения CSRF использовать уникальный маркер, хранится как в сеансе и скрытое поле формы в
- добавить свою собственную конкретную задачу здесь, чтобы получить конкретный метод защиты. от какой атаки вы хотите защитить?
- 1. HTML form submit button check
- 2. PrettyFaces url routing from form submit
- 3. php check datetime from url
- 4. Form Submit appends URL
- 5. php form submit failing
- 6. Php age check form
- 7. php simulating form submit
- 8. php submit javascript form
- 9. php form submit utf8?
- 10. PHP Form Submit Loop
- 11. Form submit, downloads php
- 12. PHP Re-submit form
- 13. PHP form submit без перезагрузки
- 14. return false not prevent form from submit
- 15. pjax submit form URL redirection
- 16. Ajax и PHP Form Submit
- 17. PHP mysql video uploading form check
- 18. Zend framework 1 submit form url/action
- 19. FancyBox PHP form submit issue
- 20. PHP form submit с категорией
- 21. .PHP form submit не работает
- 22. PHP - Form Submit Не работает
- 23. JQuery form submit with PHP
- 24. PHP и MySQL form submit
- 25. Кнопка Form/Submit в PHP
- 26. php form - reload on submit
- 27. PHP submit to self form
- 28. PHP form validation submit problem
- 29. PHP Form submit, кроме заголовка?
- 30. PHP MSQL form submit fail
если кто-то декомпилирует вспышку, то может ли она по-прежнему быть подделкой? – proyb3
Да, его можно найти. Допустимое значение также можно найти, просмотрев сетевой трафик. В этом примере спамеру нужно будет вручную отправить форму вручную, чтобы найти волшебный ключ, а затем использовать этот ключ для остальной части дня в своем скрипте. –
Да, вы могли бы заменить его чем-то более динамичным, как я уже упоминал, если вы написали пользовательский алгоритм или что-то еще. Но вам понадобится то же самое и в Flash, и в PHP. Тогда вы можете изменить ключ на каждом представлении :) –