PHP - безопасность, что лучше? - PullRequest
7 голосов
/ 25 сентября 2008

Каков наилучший способ защитить веб-сайт интрасети, разработанный с использованием PHP, от внешних атак?

Ответы [ 6 ]

11 голосов
/ 25 сентября 2008

Это потрясающе заставляющий задуматься вопрос, и я удивлен, что вы не получили лучших ответов.

Краткое описание

Все, что вы сделали бы для внешнего приложения, а затем еще немного.

Процесс мышления

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

Итак, о какой атаке мы думаем?
Если я злоумышленник и нападаю на ваше интранет-приложение, значит, я каким-то образом получил доступ к вашей сети. Это может быть не так сложно, как кажется - я мог бы попытаться использовать фишинг (нацеливание электронной почты на людей в вашей организации, содержащее либо вредоносные вложения, либо ссылки на сайты, которые устанавливают вредоносное ПО), чтобы установить троян на внутреннюю машину.

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

Однако это еще не конец истории. У меня есть больше вариантов: если у меня есть один из компьютеров вашего пользователя, то я вполне могу использовать кейлоггер для сбора имен пользователей и паролей, а также просматривать всю вашу электронную почту на предмет имен и телефонных номеров.
Вооружившись этим, я могу войти в ваше приложение напрямую. Я даже могу узнать имя пользователя / пароль администратора. Даже если я этого не сделаю, список имен и номеров телефонов, а также ощущение компании lingo дает мне хороший шанс на социальную разработку моего пути к более широкому доступу в вашей компании.

Рекомендации

  • Прежде всего, перед всеми техническими решениями: ОБУЧАЙТЕ СВОИХ ПОЛЬЗОВАТЕЛЕЙ БЕЗОПАСНОСТЬЮ

Общие ответы по защите веб-приложения:

  • Использовать многофакторную аутентификацию
    • например. имя пользователя / пароль и какое-то устройство с псевдослучайными числами.
  • Очистить все ваши входные данные.
    • для защиты от межсайтовых скриптов и внедрения SQL.
  • Использовать SSL (иначе известный как HTTPS).
    • это очень сложно настроить (РЕДАКТИРОВАТЬ: на самом деле это улучшается), но это обеспечивает гораздо лучшую безопасность.
  • Придерживайтесь принципов "Разделение обязанностей" и "Наименее привилегия"
    • Другими словами, гарантируя, что все пользователи имеют только те разрешения, которые им необходимы для выполнения своей работы (и никто другой), вы гарантируете, что у них есть абсолютная минимальная способность наносить ущерб.
9 голосов
/ 25 сентября 2008

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

1 голос
/ 25 сентября 2008

Я бы повторил @Oli и предпочел бы метод VPN, если это возможно. Однако, если по какой-либо причине вам необходим больший произвольный доступ, чем этот, вы должны использовать SSL для обеспечения любой аутентификации. И в дополнение к аутентификации по паролю / аутентификации по IP-адресу было бы целесообразно использовать SSL с сертификатами на стороне клиента.

1 голос
/ 25 сентября 2008

Лучший способ его обезопасить? Не подключайте его к сети. Заставьте своих пользователей физически войти в охраняемую комнату с единой консолью, на которой запущен Mosaic.

О, вы хотите, чтобы им было легко пользоваться?

  1. Всегда проверяйте каждый отдельный вход, который может поступать из ненадежного источника.
  2. Не доверяйте никаким источникам данных.
  3. При хранении паролей ВСЕГДА хранит зашифрованный хэш пароля.
  4. При хранении паролей НИКОГДА не хранит пароли напрямую.
  5. Никогда не собирайте и не храните данные, которые вам на самом деле не нужны.
  6. Никогда не позволяйте себе испытывать желание добавлять дополнительные колокольчики и свистки.
  7. Прочитайте все, что Брюс Шнайер написал о безопасности и шифровании.

Если вы забудете эти простые правила, вы можете найти свое приложение в главной роли газет повсюду, точно так же, как в почте Yahoo.

1 голос
/ 25 сентября 2008

Лучший способ? Отключить прямой внешний доступ!

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

Другой вариант, и он работает только в том случае, если данные общедоступны, - это планирование вашего сервера интрасети для отправки данных на другой сервер, который доступен извне. Я говорю push, потому что вы действительно не хотите, чтобы этот сервер имел доступ к вашей сети. Пусть ваш сетевой сервер сделает всю работу.

0 голосов
/ 25 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...