2011-01-17 5 views
2

Я не запускаю критически важный веб-сайт, поэтому я не ищу промышленного решения. Однако я бы хотел защитить от базовых атак, таких как кто-то, издеваясь над ложной страницей на жестком диске и пытаясь получить несанкционированный доступ. Существуют ли какие-либо стандартные методы для обеспечения того, чтобы подача формы принималась только в законных целях?Как защитить формы PHP?

+0

Ответы, которые вы получаете до сих пор (хотя и хороши), довольно широки по охвату. Если вы можете уточнить свой вопрос, вы можете получить более подробные ответы. В частности, какое разрешение вы используете, которое можно обойти, «высмеивая ложную страницу»? –

+0

Как только у кого-то есть доступ к вашему диску, его игра закончилась. В этот момент они выполняют удаленное выполнение кода. Стандартные методы? Против чего? Прочитайте OWASP. – rook

ответ

6

Вы не можете. Нет надежного способа различать HTTP-запрос, созданный пользователем на вашей странице, или злоумышленник с собственной веб-страницей.

Просто используйте правильный подход к аутентификации по паролю, и никто не сможет сломать что-либо, если они не знают пароль (независимо от того, откуда идут HTTP-запросы). Как только у вас будет надежная аутентификация на стороне сервера, вам не нужно тратить время на прохождение через непродуманные обручи, беспокоясь об этом сценарии.

+0

@Ben: Злобный злоумышленник легко обойти. –

6

Несколько методов близки:

  • продуцируют форму ключа для каждой формы. Ключ будет относиться к записи базы данных и что-то еще уникальное в отношении просмотра страницы (идентификатор пользователя, файл cookie и т. Д.). Форма не может быть отправлена, если ключ формы не соответствует этому пользователю/cookie. Ключ используется только один раз, не позволяя автоматическому инструменту снова размещаться с помощью украденного ключа (для этого пользователя).
  • Ключ формы также может быть хэшем с разделяемым секретом: PHP, генерирующий форму, может хэш-файл cookie и userID, например, что-то, что вы можете проверить при отправке формы.
  • Вы можете добавить капчу, требующую подтверждения пользователем.
  • Вы также можете ограничить количество сообщений от этого пользователя/файла cookie (дросселирование), что может предотвратить определенные формы автоматического злоупотребления.

Вы не можете гарантировать, что форма не размещена на диске, но вы можете ограничить, насколько она автоматизирована.

-1
+1

Не стесняйтесь подробно рассказывать о том, как вы это сделаете в PHP. Просто сказать «использовать nonce» немного меньше, чем полезно. – cHao

1

я также рекомендую:

  1. Сохранить IP компьютера, который отправляет форму (чтобы заблокировать его с сервера, если it.s раздражает)
  2. Используйте CAPTCHA, когда это необходимо, чтобы избежать роботов ...
  3. Отправляйте пользователей на другую страницу, когда информация загружается, поэтому данные POST не будут восстановлены при обновлении страницы.
+0

Обратите внимание, что IP-адреса могут использоваться более чем одним клиентом по крайней мере по нескольким причинам (например, повторное использование IP-адресов и маскирование маршрутизатора). –

4

Вы не должны создавать систему входа самостоятельно, потому что это сложно сделать правильно (безопасность). Вы не должны хранить пароли (в любой форме) ваших пользователей на вашем сайте (опасно) => Возьмите, например, lifehacker.com, который был взломан (моя учетная запись тоже :(). Вы должны использовать что-то вроде lightopenid (так как stackoverflow также использует openid) для вашей аутентификации.

Остальные формы у вас есть на вашем сайте должны иметь следующую защиту (по крайней мере):

  • CSRF защита: This link объясняет thorougly, что CSRF есть и что еще более важно, как защититься от CSRF
  • Использование http-only cookies: http-only sessions, http-only cookies
  • Защита от XSS using filter.
  • Использование PDO подготовлено заявление для защиты самостоятельно, вы против SQL-инъекции
0

Есть несколько метод, который можно добавить в виде безопасности, как

  1. сенсибилизирования на вход
  2. Origin Validation
  3. Повторно captcha
  4. AVoid переменная сервера

Для получения более подробной информации вы можете обратиться к разделу безопасности PHP Form handling tutorial.

Смежные вопросы