Разное

Защита сайта на пхп: Как делают защиту на сайте на PHP? — Хабр Q&A

Содержание

Безопасность PHP на сервере | Losst

PHP — это один из самых популярных серверных языков программирования с открытым исходным кодом. Он используется не только для создания сайтов, но и в качестве языка программирования общего назначения, а также для написания серверной части различных веб-приложений.

Выполнять скрипты на PHP могут веб-серверы Apache, Nginx и Lighttpd. Также PHP может выполняться интерпретатором прямо из командной строки. Но поскольку PHP установлен на сервере, он может создать ряд проблем с безопасностью, поэтому его нужно применять осторожно.

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

Содержание статьи:

Как улучшить безопасность PHP?

Все приведенные ниже советы рассчитаны на то, что PHP работает под управлением Nginx или Apache, сам интерпретатор PHP недоступен из внешней сети. А теперь, перейдем к рассмотрению того как выполняется защита php кода, сайта и сервера в целом.

1. Знайте врага в лицо

Приложения на основе PHP могут подвергаться различным типам атак, вот основные из них:

  • XSS — это уязвимость в веб-приложениях, с помощью которой злоумышленники могут выполнять произвольный JavaScript код в браузере пользователей, и таким образом, украсть его данные. Возникает из-за отсутствия проверки на данных в скриптах на правильность;
  • SQL инъекция — это уязвимость в коде работы с базой данных. Если пользовательский ввод неверно фильтруется скриптом, и используется для формирования запроса к базе данных, то злоумышленники могут выполнить любые запросы к базе данных. Для предотвращения такой проблемы рекомендуется фильтровать данные функцией mysql_real_escape_string() перед отправкой запроса;
  • Загрузка файлов — позволяет посетителю загружать файлы на ваш сервер. Загрузив определенный тип файлов, пользователи могут получить доступ к системе или даже украсть информацию из базы данных, поэтому нужно следить чтобы можно было загружать только картинки;
  • Удаленное выполнение — злоумышленник может удаленно выполнять php файлы, которые есть на сервере, поэтому вместе с возможностью загрузки PHP файлов это представляет серьезную опасность;
  • Eval() — позволяет выполнить код PHP, переданный в строке, часто используется злоумышленниками, чтобы скрыть свой код на вашем сервере;
  • CSRF атака — позволяет заставить пользователя выполнить нежелательные действия в веб-приложениях. Если пользователь является администратором, это может поставить под угрозу все приложение.

2. Используйте только необходимые модули

Чтобы посмотреть все скомпилированные модули PHP выполните команду:

php -m

Рекомендуется использовать только самые необходимые модули, чтобы увеличить безопасность. Например, вы можете отключить модуль sqlite. Для этого можно удалить его конфигурационный файл в /etc/php5/conf.d/. Но для полного удаления нужно пересобрать PHP без этого модуля.

3. Избегайте утечек информации

В конфигурационном файле php.ini есть строчка:

expose_php = Off

Если установлено значение On, то PHP будет отправлять версию PHP в ответ на все запросы в заголовке X-Powered-By. Также рекомендуется скрыть версию Apache и другую информацию. Защита php от взлома, это не только аккуратное программирование, но и сокрытие информации о системе.

4. Отключите динамические расширения

PHP поддерживает динамическую загрузку расширений. По умолчанию загружаются все расширения, конфигурационные файлы которых есть в /etc/php/conf.d/. Также загружаются модули, которые указаны директивой extension в основном конфиге php.ini. Мы можете удалить ненужное.

5. Вывод ошибок

Сообщения об ошибках содержат много информации, не позволяйте их смотреть всем пользователям сайта. Приведите директиву display_errors к такому виду:

display_errors = Off

Убедитесь, что вы сохраняете все ошибки в лог файл:

log_errors = On
error_log = /var/log/httpd/php_scripts_error.log

6. Запретите загрузку файлов

Если загрузка файлов не нужна, запретите ее:

file_uploads = Off

Но если такая функция необходима, то лучше ограничить размер файла:

file_uploads = On
upload_max_filesize = 1M

Пользователи смогут загружать файлы размером не более 1 мегабайт, так безопасность в php будет больше.

6. Отключите удаленное выполнение кода

Если параметр allow_url_fopen включен, php может использовать такие файловые функции, как file_get_contents. С помощью нее скрипт может загружать файлы из удаленных серверов. Программисты часто забывают выполнить надлежащую фильтрацию данных, и тем самым открывают уязвимость. Для отключения измените директиву:

allow_url_fopen = Off

Также рекомендуется отключить allow_url_include:

allow_url_include = Off

7. Включите безопасный режим SQL

В безопасном режиме SQL, интерпретатор игнорирует все аргументы, передаваемые в функции mysql_connect и mysql_pcconnect. Но в таком режиме будут работать не все скрипты, например, не будет работать WordPress, так что используйте аккуратно. Для включения добавьте директиву:

sql.safe_mode = Оn

Также рекомендуется отключить функцию magic_quotes_gpc, вместо нее лучше использовать mysql_escape_string:

magic_quotes_gpc=Off

9. Контролируйте размер POST

Метод POST используется, когда браузер хочет передать веб-серверу определенное количество данных как часть запроса, например, при загрузке файла. Злоумышленники могут использовать большие запросы, чтобы истратить ресурсы сервера. Поэтому размер лучше ограничить:

post_max_size=1K

10. Контролируйте ресурсы

Вы можете указать максимальное время выполнения для каждого скрипта, максимальное количество памяти и максимальное время чтения данных, это увеличит безопасность сайта php в плане DOS атак:

max_execution_time = 30
max_input_time = 30
memory_limit = 40M

11. Отключите опасные функции

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

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

12. Настройте Fastcgi для лучшей безопасности

PHP может работать через FastCGI, это уменьшает использование памяти вашего веб-сервера. Нужно включить директиву force_redirect чтобы предотвратить прямое выполнение php скриптов из строки запроса, например, cgi-bin/php/hackerdir/backdoor.php. Для этого добавьте:

cgi.force_redirect=On

13. UID и GID интерпретатора PHP

Если вы используете внешний FastCGI сервер, то нужно чтобы он был запущен не от пользователя root. Запускайте php от имени непривелигированного пользователя. Как вы знаете, у PHP есть функции, которые позволяют выполнять команды оболочки. Очень небезопасно, если они будут выполняться от суперпользователя.

14. Ограничение доступа к файловой системе

Директива open_basedir позволяет установить каталог, в котором php может получить доступ к файлам с помощью таких функций, как fopen, file_get_contents и т д. Если файл находится вне этой директории PHP откажется его открывать. Вы даже не сможете использовать символические ссылки.

open_basedir = "/var/www/html/"

15. Путь для хранения сессий

Нужна не только защита php сайта, чтобы скрипты не смогли причинить вред системе, но и чтобы пользователи не могли получить доступ к файлам php. Сессии в php позволяют сохранить определенную информацию между обращениями пользователя. Путь, где будет храниться эта информация указан в файле /etc/php/php.ini. Убедитесь, что этот путь находится вне /var/www/ и недоступен для чтения или записи для других пользователей системы.

upload_tmp_dir = "/var/lib/php/session"

16. Держите программное обеспечение в актуальном состоянии

Все программы могут содержать различные уязвимости, поэтому важно выполнять регулярное обновление системы, чтобы вовремя применить все патчи безопасности. Нужно обновлять не только PHP, а весь программный стек, в том числе Apache.

17. Используйте SELinux

SELinux — это система безопасности, используемая по умолчанию в RedHat. Ее можно использовать для предотвращения несанкционированного доступа к файлам и ресурсам. Например, вы можете установить политики безопасности для веб-сервера Apache или отдельного сервера PHP. Это тоже отличная защита PHP и не только.

18. Установите mod_security

Это модуль Apache для обнаружения и предотвращения в веб-приложения. Он может защитить php и ваше приложение от XSS и SQL-Inj атак. Например, чтобы не позволять открывать файлы в /etc/ после установки модуля добавьте в конфигурационный файл Apache:

SecFilter /etc/

А для предотвращения SQL инъекций:

SecFilter "delete[[:space:]]+from"
SecFilter "select.+from"

19. Просматривайте журналы

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

 tail -f /var/log/httpd/error_log
$ tail -f /var/log/httpd/php_scripts_error.log

Выводы

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

На завершение лекция про безопасность написания скриптов в PHP:

Как защитить сайт от вирусов и PHP.Hide

Здравствуйте читатели seoslim.ru! Проблема защиты сайтов всегда была актуальна для всех вебмастеров, потому что никто не застрахован, что в один прекрасный день какой-либо из файлов проекта будет заражен вредоносным кодом.

Последствия могут быть различные, все зависит от того чего добивался злоумышленник создавая вирус: потеря данных, перенаправление трафика или уничтожение сайта…

Поисковые алгоритмы трепетно относятся к ранжированию сайтов в выдаче, поэтому постоянно проверяю на безопасность отдаваемые ими данные, и если при очередной проверке роботов будет обнаружен вредоносный код (троян, вирус, червь), то такой сайт помечается в «SERP» как не безопасный.

В Яндексе такие проекты выделены другим цветом (серым) с предупреждением, что скачивать файлы с сайта небезопасно.

Google раньше помечал вредоносные сайты сообщением «Этот сайт может нанести вред вашему компьютеру», однако теперь я такого предупреждения у него выдаче больше не вижу.

Зато Гугл не перестает развивать собственный интернет-браузер Хром, который на раз блокирует вредоносные сайты специальной заглушкой.

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

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

О том как я победил вредоносный код было рассказано в статье «Проверка и защита сайта от вредоносного кода Iframe», обязательно перейдите по ссылке, а то вдруг с такой проблемой придется столкнуться.

В любом случае надо искать заразу (вирус) в недрах сайта или компьютера, удалять и менять все доступы к админке, ftp и почте.

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

Новая атака на блог — PHP.Hide

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

Но увы ошибся

Пару дней назад решил перейти в админку своего хостинг-провайдера Макхост, дабы продлить услуги домена, но обратил внимание на уведомление из раздела «Управление услугами» в отчете антивируса.

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

Перейдя в отчет, я ужаснулся, так как мой блог находится под угрозой не известного для меня ранее вируса с пометкой PHP.Hide.

PHP.Hide — это разновидность вируса (закодированный вредоносный код), который призван рассылать спам сообщения. В большинстве случаев им страдают сайты на движке Joomla.

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

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

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

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

Как видно на фото выше по неизвестным мне причинам на сайт были закачены подозрительные файлы, замаскированные под картинки.

Из этих файлов и был тот, который хостер пометил как вирус PHP.Hide.

Насторожил тот факт, что редактировались файл самыми последними, когда 100% за прошедшее время никакие изображения не добавлялись на блог, вдобавок у этих файлов были открыты права доступа на «Запись».

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

Все подозрительные файлы были выкачены с сайта и добавлены в сервис анализа и вот какие результаты были получены:

Из 53 антивирусов 4 определило файл как вредоносный.

Все сомнительные файлы были незамедлительно удалены, далее была запрошена повторная проверка сайта на вирусы хостингом.

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

Как защитить файлы сайта

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

1) Проверьте файлы компьютера. В большинстве случаев корень зла исходит именно из железа, на котором мы привыкли работать.

Согласен, что у каждого стоит антивирусник, но как показывает практика, в большинстве случаев он не всегда найдет вирус.

Я специально скачал популярный софт CureIt, который бесплатно распространяет лаборатория Dr. Web взамен о предоставлении отчета о проверке.

После запуска он мне нашел пару троянов в системе, хотя ESET никогда на них не ругался.

2) Проверьте файлы сайта скриптом. Если не уверены, что окончательно победили вирус, можете воспользоваться:

  • RWP Checker — бесплатный скрипт, для проверки WordPress шаблонов.
  • AI-Bolit — сканер файлов хостинга.
  • Manul — антивирус для сайта от Яндекс.

Отзывы только положительные.

3) Меняем логины и пароли. Обязательно стоит сменить все логины и пароли для доступа к сайту:

  • в админку (панель управления)
  • к файлам по FTP
  • к почтовому ящику (там могут быть пароли для доступа к хостингу)

Учтите, что пароли должны быть сложными не «12345», а «dvgp47GWud12N» или еще изощреннее.

4) Обновляем CMS и Plugins. Я в большей мере уверен, что дыра к сайту был в старой версии Вордпресс, так как я ее не обновлял длительное время.

Поэтому идем в административную панель блога и обновляем CMS до последней версии.

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

5) Не размещайте JS или Iframe баннеры. Есть такие хитрые рекламодатели, которые по разным причинам хотят купить у вас баннер, даже не в основном содержании статьи, но выводится он не как GIF или PNG картинка, а с помощью JS или Iframe кода.

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

На этом у меня все, буду рад узнать от своих читателей в комментариях, сталкивался ли кто с подобной заразой на подобии закодированного вредоносного код в php файлах.

И какими еще способами можно обезопасить сайт от постороннего посягательства, чтобы предотвратить заражение файлов?

Как организовать защиту от парсинга сайта? — Хабр Q&A

1. Сайт изначально предназначен для публикации, то есть он открыт.
2. Если вы не хотите чтобы информация была открыта, не публикуйте.

Из 1 пункта следует, что нет достаточных средств для защиты от парсеров.
Вопрос только в том, на сколько вы готовы и можете усложнить жизнь для парсеров.
А нужно ли это? Может вы — «неуловимый Джо»?
Все что может прочитать и распознать человек (а ведь именно для людей и делается сайт?) может быть воспроизведено. В части, где парсинг может быть автоматизирован, он будет автоматизирован.
Сейчас существуют мощные парсеры Яндекса и Гугла. Если они ваш сайт не смогут разобрать, то и в индексе его не будет, значит полезная информация не дойдет до конечного пользователя.
А тот, кто захочет, ее скопирует, если информация очень нужна. Если даже вы представите в виде мозаики из картинок и кусков, даже если зашифруете, но информация на экране должна все равно быть читабельной, а значит простой принтскрин и распознавание в FineReader будет быстрее, чем вы напишите защиту от него…

Бросьте это занятие!

Не существует защиты созданной человеком, которую не возможно сломать, вопрос времени…
Единственный путь, это шифрование с выдачей ключа клиенту. Но клиент — человек не надежен, и информация уплывет, вопрос цены!

И еще раз бросьте это!

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

Последний совет: бросьте это!

Единственное что может вам помочь, это не раскрывать полностью всю информацию о предмете, или разделить на несколько частей, но при этом не должно быть неудобства для посетителя. К примеру, скройте «количество зубцов в шестеренке», любую ключевую информацию, без которой «самолет не взлетит».

А если хотите поиграться, то пришла в голову идея: перемешивание по определенному алгоритму текста, который потом восстанавливается, применение стилей для скрытия «фальшивых» слов или фраз. Например, задать стиль, который скрывает каждое второе предложение или слово. Но к сожалению, это ломается на ура! Но доставит радости для взломщиков 🙂

Извините, за столь большой сумбур!

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

2. Верстка. Не знаю про бан от поисковиков, но это тоже ломается. Просто убираете теги и все. Просто в парсер добавляется «умный» фильтр. Можно конечно где-то картинку заменить фоном, или часть текста картинкой, но и на это можно сделать разборщик.

3. Блокировка по IP не прокатит, так как могут пострадать реальные люди, достаточно применять динамический IP.

А вообще, если хотите спастись от простых парсеров, то комплекс мер может помочь. Так же могу натолкнуть на идею, того, что парсеры обычно очень активны, и по количеству запросов с одного IP, по USER_AGENT, и другим меткам, а так же по отсутствию javascript, по обработке тега <МЕТА> redirekt.info/article/redirekt-na-html-s-zaderzhko… (отложенный редирект) и другим признакам. Можно запихнуть скрытую картинку (style=»display: none»), большинство парсеров ее могут дернуть (зависит от настроек).

В общем, можно поставить задачу в другом ключе: «Расстановка ловушек для парсеров». То есть ловить на том, чего обычные люди и браузеры делать не будут. Например, заполнять «скрытое поле пароль». Удачные ловушки дадут вам возможность выявить подставных, но лучше делать несколько проверок, а то можно и реального пользователя забанить. А я бы не стал банить, а сливал бы немного или частично измененную инфу. Эта инфа может стать маркером для выявления того, кто действительно желает с вас «слить».

Все, удачи!

Методы защиты веб-формы без капчи / Хабр

О чём речь?

В последнее время на Хабре было предложено довольно много идей для капчи. Сложная, умная, смешная, капча остаётся одним из основных способов защиты формы от ботов.

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

В этом обзорном посте я бы хотел рассмотреть незаметные для пользователя методы защиты от ботов.

Методы защиты
Минимальное время заполнения формы

Суть метода заключается в том, что сервер замечает время создания формы. Если пользователь заполнил форму меньше чем за определённое время, то он считается ботом. Время можно варьировать в зависимости от сложности формы.
Верно также, что если форма не была заполнена слишком долго, то что-то не так.

Скрытое поле

Этот метод может показаться странным, но он, похоже, работает. К форме добавляется скрытое поле (скрытое в смысле display:none). Если поле заполнено, то пользователь считается ботом.
Удивительно, но многие простенькие боты заполняют все неизвестные поля.

Обфускация или шифрование HTML

Исходный код страницы является, по сути, вызовом javascript функции вроде document.write( decode( encodedHTML ) ), где encodedHTML — это как-то зашифрованный HTML.

Методы шифрования могут варьироваться от простого эскейпирования значений буковок (буква превращается ‘%код’ ) до некоторых алгоритмов шифрования (например, простенький XOR).

В интернете есть много готовых решений, например, вот тут.

Блокирование определённых user-agent

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

В интернете есть списки таких заголовков. Вот, например, от некого Нила Гантона.

«Ловушка» для ботов

Суть этого метода заключается в создании специального раздела сайта вроде «/bot/guestbook». Ссылка на этот раздел не видна для пользователя, однако если бот зайдёт в этот раздел и сделает там хоть что-нибудь, то его IP тут же блокируется.
Раздел должен содержать лакомые для бота слова вроде «email», «submit», «add comment» и тому подобные. Файл «robots.txt» предупреждает хороших ботов.

Хеширование формы (BarsMonster)

При сабмите формы на сервер вычисляется хеш полей формы и добавляется в одно из специальных скрытых полей. Сервер проверяет значение хеша.

Использование прозрачных кнопок (BarsMonster)

У формы есть несколько кнопок типа <input type="image". Лишь на одной из картинок написан текст, остальные — прозрачные. Для сабмита пользователь должен нажать на картинку с текстом.

Динамическое создание формы (maxshopen)

Сама форма полностью создаётся javascript-методом динамчески. Таким образом, форму может увидить лишь пользователь, у которого отработал соответствующий скрипт.

Использование сторонних сервисов (le0pard)

Можно туннелировать трафик через специальный сервис, предназначенный для анализа контента на спам. Примером такого сервиса может быть Akismet

Гибридный подход

По умолчанию форма защищена каким-либо javascript-методом (динамическое создание формы или шифрование данных) или методом из приведённых выше. Если форма была засабмичена некорректно, то возвращается ошибка и просьба заполнить не очень простую капчу.

Важные замечания

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

Два. Пост не рассматривает слабые стороны методов. Это можно обсудить в комментариях.

Три. Заинтересовавшимся рекомендую почитать пост некого Нила Гантона (на английском).

UPD: Добавил несколько методов из комментариев. Спасибо, BarsMonster.

UPD2: Добавил ещё один метод из комментариев.

Спасибо, maxshopen, за отличную критику методов.

UPD3: Добавил ещё один метод из комментариев. Спасибо, maxshopen.

UPD4: Добавил ещё один метод из комментариев. Спасибо, le0pard.
mprokopov кинул ссылку на спам-блок плагин для рельсов: snook

Заключение

Увы, мне удалось найти не так много методов защиты веб-форм.

А какие ещё безкапчевые методы защиты вы знаете?

Revisium LOR — проактивная защита для сайтов на shared-хостингах и VPS

Revisium LOR — это веб-приложение, написанное на PHP, которое настраивается на аккаунте любого хостинга и обеспечивает надежную и эффективную защиту сайта от взлома и веб-атак. На программный продукт получено авторское свидетельство в РосПатенте.

Легковесное решение, настраивается за пару минут, снижает нагрузку на сервер, обеспечивает комплексную защиту от взлома, веб-атак, спама форм и несанкционированного доступа к административным разделам сайта. «Он такой же проворный, как мангуст.»

Более 4000 наших клиентов уже находятся под защитой Revisium LOR.

Что умеет WAF

Возможности

Основным техническим средством защиты от веб-атак является проактивная защита (Web Application Firewall или “WAF”). Хороший WAF должен сочетать в себе большой набор возможностей:

  • Защиту от хакерских веб-атак:
    загрузки и инъекций вредоносного кода, эксплуатации уязвимостей, доступа к «чувствительным» файлам и пр.
  • Защиту от HTTP флуда и спама веб-форм
  • Фильтр «плохих» ботов
  • Двухфакторную аутентификацию административных разделов сайта
  • Виртуальный патчинг уязвимостей
  • Расширенное логгирование запросов для анализа инцидентов
  • Статистику по запросам/атакам и блокировкам в графическом и табличном представлении

Все эти возможности доступны в проактивной защите Revisium WAF, которую мы настраиваем на защищаемом сайте клиента.

Отличия от других продуктов

Особенности

Быстрая настройка на любом виртуальном хостинге.

Первой отличительной особенностью нашего решения является то, что настроить Revisium WAF можно абсолютно на любом shared-хостинге с поддержкой PHP и, конечно, на VPS сервере. То есть для подключения сайта к защите не требуется вносить изменения в NS записи домена, не нужно перенастраивать сайт, не требуется фаза «обучения» Web Application Firewall. Проактивная защита начинает работать сразу после активации, а для настройки WAF требуется добавить всего одну строку в файл .htaccess или php.ini – это параметр auto_prepend_file.

Эффективная фильтрация запросов.

Второй особенностью Revisium WAF является его подход к обработке запросов на сайт. Обычный Web Application Firewall содержит базу правил, по которым происходит обработка/фильтрация запросов и принятие решения – безопасный это запрос или опасный. И для эффективной работы WAF эти правила не должны быть слишком «общими», чтобы не допускать так называемых «ложных срабатываний» (ошибочной блокировки легитимных запросов). В то же время, если сделать правила очень специфичными и точными, то возникает большая вероятность пропуска опасных запросов и хакерских атак, так как подобных правил должно быть очень много под каждый тип веб-атак. В итоге обычный Web Application Firewall в погоне за надежной защитой сталкивается с проблемой большого числа «ложных срабатываний», в результате которых как обычные посетители, так и сам администратор в некоторых случаях не могут получить доступ к ряду функций и разделов сайта из-за блокировок со стороны защиты. Если же разработчик обычного WAF ослабляет настройки, то в результате снижается надежность и эффективность защиты. У нас используется иной подход.

Мы разработали уникальную систему двухфакторной аутентификации, градации правил безопасности и настраиваемые “белые списки”, которые повышают точность обнаружения атак и снижают число «ложных срабатываний».

Админ-панель WAF

Интерфейс администратора

Кроме эффективной защиты наши клиенты получают в свое распоряжение удобную панель со статистикой запросов к сайту, возможность просмотра заблокированных атак, уникальную статистику “живых запросов”, которая отображает запросы к сайту в реальном времени, возможность просмотра географии запросов и многие другие полезные возможности.

Настройка проактивной защиты является частью услуг “Скорая помощь”, “Превентивная защита” и “Сайт под наблюдением”. Ознакомиться с услугами можно здесь.

Хостинг-компаниям и разработчикам панелей хостинга мы предлагаем интеграцию Revisium LOR в панель. Напишите нам на [email protected].

Можно ли защитить свой сайт от парсинга? Нет, и вот почему — Сервисы на vc.ru

Моя компания занимается парсингом интернет-магазинов в России уже более трёх лет, ежедневно мы парсим около 400 крупнейших сайтов в РФ. И еще не встречали защиты, которую мы не смогли бы обойти.

За последние годы мы реализовали множество проектов, связанных с получением данных крупнейших сайтов. Это, например, HeadHunter, «Яндекс.Еда», Beru.ru, «Ламода». И сегодня спрашиваем сами себя — можно ли защититься от этого? Более того, к нам уже обращаются компании, которые просят проверить свою защиту от парсинга «извне» так сказать. Расскажем чуть подробнее сложности, с которыми вы столкнетесь, если решите заняться защитой от парсинга.

Вначале — что такое Скрапинг, или парсинг? Это сбор данных с различных интернет-ресурсов. Общий принцип работы можно объяснить так: боты обращаются к открытым страницам целевого сайта, получают HTML-код, разбирают его на составляющие (парсят), ищут нужные данные и сохраняют в своей базе данных. Таким образом получается «чистая» копия данных, хранящихся на сайте, — товаров, резюме, изображений, текстов. Если над одним сайтом проводить парсинг регулярно, то можно отслеживать изменения. Например, наблюдать за изменением цен или товарных запасов. Самыми заметными парсерами являются поисковые системы. «Яндекс» и Google напрямую занимаются парсингом: они заходят на сайт и индексируют его — собирают информацию. Защищаясь от парсинга, подумайте — не заблокируете ли вы заодно и свое присутствие в поисковиках и любимый SEO?

У людей, далеких от IT, присутствует эдакое идеализированное представление о программировании как в компьютерных играх 80-х: вы надеваете шлем виртуальной реальности и погружаетесь в «Матрицу». На самом деле вся информация и все взаимодействия — это нули и единицы. Здесь нет ничего человеческого. Нет различия между данными, введенными компьютером или человеком.

Для вашего веб-сервера все равно, кто запрашивает данные — бот или человек. Оба они делают это одинаково. Если посетители могут получить доступ к контенту на вашем сайте, то и наш бот сможет получить такой же доступ (с вероятностью 99%). Все технологические решения против парсинга могут помешать реальным пользователям в той же мере, что и ботам.

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

Техническая защита от парсинга

Блокировка «плохого» юзер-агента

Любой запрос к веб-серверу содержит заголовки, в том числе данные о браузере — так называемый юзер-агент (user agent), идентификатор клиента.

Решение: заголовки меняются произвольным образом и любой бот может имитировать реальных пользователей. Более того, на нашей стороне HTTP-заголовки рандомизируются (если это необходимо) между сеансами парсинга, поэтому так заблокировать бот невозможно.

Блокировка IP-адресов

Хорошо, заголовки можно произвольно менять, но невозможно менять IP-адрес, с которого обращается клиент. Можно же определить адреса ботов и заблокировать их?

Решение: «поддельны

PHP: RFC: automatic_csrf_protection

Введение

CSRF (подделка межсайтовых запросов) представляет собой серьезную уязвимость для приложений PHP. Защиту CSRF несложно реализовать, особенно с хорошими фреймворками веб-приложений. Однако для защиты CSRF требуется много строк кода, если пользователям приходится реализовывать их самостоятельно. Это предложение расширяет модуль сеанса, чтобы обеспечить дополнительную автоматическую / ручную защиту CSRF для веб-приложений PHP.

Хотя базовая аутентификация (защита CSRF) должна быть частью веб-инфраструктуры, она не решалась в диспетчерах сеансов, поскольку

PHP имеет буфер вывода и переписчик URL . Они используются для Trans SID (Transparent Session ID) для управления сеансом без файлов cookie в настоящее время. Их можно расширить, добавив защиту от CSRF.

Это предложение не предназначено для замены защиты CSRF фреймворка, но оно предоставляет альтернативу приложениям PHP с минимальными изменениями кода / настроек.

Предложение

TL; DR;

Это RFC архивы:

  • Веб-приложения могут быть легко защищены от атак CSRF , если защита CSRF требуется только для запросов POST из веб-форм.

  • Для более сложной защиты CSRF разработчики могут использовать токен CSRF и проверку вручную.

  • Можно использовать существующие защиты CSRF. (По умолчанию функция отключена)

Модуль сеанса расширен для управления проверкой CSRF.Когда защита CSRF включена, атака CSRF предотвращается с помощью session_start (). По умолчанию выполнение прекращается, но разработчики могут подавить ошибку и самостоятельно обнаружить CSRF-атаку с помощью session_csrf_status (). Валидация может быть выполнена разработчиками также через session_csrf_validate (). Токен защиты CSRF генерируется случайным секретным ключом, хранящимся в данных сеанса, и указанным значением TTL. Украденный токен защиты CSRF допускает атаки только на определенный период до TTL.

Учебные веб-формы, такие как

 

может быть защищен одной линией. 1)

  SESSION_CSRF_POST, 'csrf_validate' = SESSION_CSRF_POST]); ?> 

Сколько уязвимостей CSRF существует в приложениях PHP? Использовать эту защиту CSRF просто и легко. Этот RFC поможет огромному количеству приложений PHP.

Пример — автоматическая защита CSRF для всего сайта через POST

  SESSION_CSRF_POST, 'csrf_validate' => SESSION_CSRF_POST); ?> 

Все страницы сообщений, использующие сеанс PHP, защищены. Если приложение изменяет данные только с помощью POST, для защиты POST CSRF будет достаточно session_start (). Разработчики могут поймать E_RECOVERABLE_ERROR 2) с помощью обратного вызова set_error_handler () и обработать их.

ПРИМЕЧАНИЕ. Браузеры не могут отправлять запросы POST напрямую.то есть он должен отображать «форму» перед отправкой. Формы всегда будут иметь токен CSRF с помощью перезаписчика URL . Следовательно, запросы POST всегда имеют токен CSRF.

Пример — Ручная защита от CSRF

Встраивание токенов и кодов проверки вручную ошибочно, но поддерживается.

Чтобы защитить CSRF от вручную, пользователь может

затем пользователь может добавить токен вручную

  SESSION_CSRF_NONE, 'csrf_validate' => SESSION_CSRF_NONE]);
?>
// ПОЛУЧИТЬ
 Удалить идентификатор: 1234 
// POST - поместите это внутри тега формы
 

затем подтвердите вручную

  SESSION_CSRF_NONE, 'csrf_validate' => SESSION_CSRF_NONE]);
// Это POST.if (session_csrf_validate ($ _ POST)! == SESSION_CSRF_VALID) {
  die ('Неверный запрос');
} 

Ниже приведены примеры ручной защиты.

Страница входа.

  SESSION_CSRF_NONE, 'csrf_validate' = SESSION_CSRF_NONE]);
?>

 

 Удалить идентификатор: 1234 

 Показать идентификатор: 1234 

Вывод в браузер будет примерно таким:

 
 

 Удалить идентификатор: 1234 

 Показать идентификатор: 1234 

delete.php

  SESSION_CSRF_NONE) и проверку явно ('csrf_validate' => SESSION_CSRF_NONE) - по умолчанию они отключены
session_start (['csrf_rewrite' => SESSION_CSRF_NONE, 'csrf_validate' => SESSION_CSRF_NONE]);
if (session_csrf_validate ($ _ GET)! == SESSION_CSRF_VALID) {
  die ('Атака CSRF или просроченный токен CSRF');
}
// Удаляем данные
?> 

Показать.php

  SESSION_CSRF_NONE, 'csrf_validate' = SESSION_CSRF_NONE]);
// Нет токена проверки CSRF для этого
// Показать данные
?> 

edit.php

  SESSION_CSRF_NONE, 'csrf_validate' = SESSION_CSRF_NONE]);
if (session_csrf_validate ($ _ POST)! == SESSION_CSRF_VALID) {
  die ('Атака CSRF или просроченный токен CSRF');
}
// Изменить данные
?> 

Пример — автоматическая перезапись и проверка

GET перезаписать
 session_start (['csrf_rewrite' => SESSION_CSRF_GET]); 

Это переписывает

  Удалить идентификатор: 1234  

к

  Удалить идентификатор: 1234  

ПРИМЕЧАНИЕ. Пример «SESSCSRF = 1462920523-5fd057a6ff9dc7a124fa5c814765a498e5aa024a» добавляется автоматически.

перезапись POST
 // Добавить токен защиты CSRF для POST ('csrf_rewrite' => SESSION_CSRF_POST)
session_start (['csrf_rewrite' => SESSION_CSRF_POST]); 

Это переписывает

 

к

 

ПРИМЕЧАНИЕ. Пример «» добавляется в форму автоматически.

Проверка токена CSRF

Подтвердите запрос GET.

 // 'csrf_validate' => SESSION_CSRF_GET включает проверку токена $ _GET CSRF
session_start (['csrf_validate' => SESSION_CSRF_GET]); 

Подтвердите запрос POST.

 // 'csrf_validate' => SESSION_CSRF_POST включает проверку токена $ _POST CSRF
session_start (['csrf_validate' => SESSION_CSRF_POST]); 

Подтвердите запросы GET и POST.

 // Включите как проверку токена CSRF $ _GET / $ _ POST
session_start (['csrf_validate' => SESSION_CSRF_GET | SESSION_CSRF_POST]); 

Добавлено / Расширенные настройки / Возможности

Может показаться, что реализация сложна из-за большого количества параметров / функций / констант конфигурации, но она проста и понятна.

  1. Добавить скрытую внутреннюю структуру данных в данные сеанса, в которых хранится ключ генерации токена CSRF.
    Массив «__PHP_SESSION__» хранится в данных сеанса, но пользователь не может видеть ключ из своего приложения.

  2. Добавить session.csrf_token_name (строка) INI.
    Имя токена CSRF. По умолчанию «SESSCSRF».

  3. Добавить константы для session.csrf_rewrite / session.csrf_validate / session_csrf_token ()

  4. Добавить сеанс.csrf_rewrite (число) INI.
    Разрешить перезапись CSRF. (Это значение INI может быть указано как параметр session_start ()) По умолчанию: session.csrf_rewrite = SESSION_CSRF_NONE.

  5. Добавить session.csrf_validate (int) INI.
    Включите проверку CSRF, если session.csrf_protection = 1. (Это значение INI может быть указано как параметр session_start ()) По умолчанию: session.csrf_validate = SESSION_CSRF_NONE.

  6. Добавить session.csrf_ttl (int — секунды) INI.
    Управляет истечением срока действия токена защиты CSRF, когда значение больше 0. 0 для отключения управления TTL. По умолчанию: 1800

  7. Добавить session.csrf_domains (строка) INI.
    Управляет доверенными доменами по умолчанию «». Если пусто, используется HTTP_HOST. По умолчанию: пусто

  8. Добавить session.csrf_hash (строка) INI.
    Управляет алгоритмом хеширования, используемым для генерации токена CSRF. Любые поддерживаемые хеш-функции. Префикс «hmac-» для HMAC. По умолчанию «hmac-sha256».

  9. Добавить session.csrf_error (int — уровень ошибки) INI.
    Управляет, какая ошибка возникает при ошибке проверки токена CSRF. По умолчанию: E_RECOVERABLE_ERROR

  10. Extend session_start ()
    Поддержка параметров csrf_rewrite, csrf_validate, csrf_ttl, csrf_domains, csrf_error.

  11. Добавить int session_csrf_status (void) function
    Возвращает статус проверки токена CSRF.

    • SESSION_CSRF_DISABLED: защита CSRF не включена

    • SESSION_CSRF_INVALID: неверный запрос

    • SESSION_CSRF_EXPIRED: срок действия токена CSRF истек

    • SESSION_CSRF_VALID: Действительный запрос

  12. Добавить int session_csrf_validate (array $ input_to_validate) function
    Она проверяет токен CSRF вручную, $ _GET / $ _ POST или любую другую переменную массива, содержащую токен CSRF.

  13. Добавить строку session_csrf_token ([int $ token_string_type = SESSION_CSRF_NONE]) Функция возвращает строку токена CSRF.

    • SESSION_CSRF_NONE: вернуть только значение токена CSRF.

    • SESSION_CSRF_GET: вернуть строку токена CSRF для GET (строка запроса). например ini_get (‘session.csrf_token_name’). знак равно session_csrf_token ().

    • SESSION_CSRF_POST: вернуть строку токена CSRF для POST. например ‘<тип ввода = «скрытый» имя = «».ini_get ('session.csrf_token_name'). '”value =“'. session_csrf_token (). '”/>‘;

Поведение

Создание страницы
  1. Сгенерировать случайный ключ токена CSRF (csrf_token_key), если он не существует в массиве __PHP_SESSION__.

  2. Маркер защиты вычислений CSRF.
    SESSCSRF (значение токена защиты CSRF) = время () + session.csrf_ttl. «-». hash_hmac (‘sha256’, time () + session.csrf_ttl, csrf_token_key) по умолчанию.

  3. Установить SESSCSRF как URL перезаписать вар. (Это приводит к тому, что URL-адреса / формы имеют на странице SESSCSRF = token_value)
Получение CSRF-токена вручную

Приложениям JS может потребоваться получить токен CSRF вручную.

get_csrf_token.php

  SESSION_CSRF_GET]);
// Токен CSRF безопасен, потому что он генерируется с использованием секретного случайного ключа, хранящегося в данных сеанса.echo json_encode (['SESSCSRF' => session_csrf_token ()]);
?> 
Проверка токена
  1. Проверка выполняется в соответствии с настройкой session.csrf_validate.

  2. Разделить значение токена SESSCSRF на «-»

    1. Проверить режим проверки CSRF (например, SESSION_CSRF_POST / GET).

    2. Проверить значение TTL part> time (). Если истек, то возникает ошибка.

    3. Проверить часть токена CSRF === hash_hmac (‘sha256’, ttl_value, csrf_token_key).Если не совпадает, вывести ошибку.

  3. Если ошибка не возникает, статус защиты CSRF может быть проверен с помощью session_csrf_status () вручную.

Ограничения

  • Поскольку пользователи могут включать / отключать защиту CSRF, страницы, которые принимают запросы, должны включать защиту CSRF. В противном случае защита работать не будет. т.е. эта функция не является защитой от дурака.

  • Поскольку средства защиты GET CSRF добавляют токен защиты CSRF ко всем применимым URL-адресам, страницы с частным URL-адресом URL и общедоступным URL-адресом URL не могут использовать автоматическую защиту GET CSRF.
  • Маркер

  • CSRF в URL-адресах имеет тот же риск, что и Trans SID. (Токен CSRF в URL не рекомендуется)
  • POST / GET должен содержать элемент для проверки. Если вам нужно проверить пустой POST / GET или любые другие специальные входные данные, используйте session_csrf_validate () вручную. Он возвращает SESSION_CSRF_DISABLED для пустого массива.

Вопросы и ответы

Почему это должно быть в PHP?

Простота и безопасность кода пользователя.

Если приложению требуется только защита POST CSRF, 2 настроек INI достаточно для защиты всего приложения.Модификации кода не требуется. Есть много существующих приложений, которые могут быть защищены этим.

Эта реализация более безопасна, чем большинство реализаций защиты от CSRF, поскольку имеет TTL. Токен CSRF действителен только в указанное время, и значение токена изменяется в соответствии с TTL. Эта реализация намного безопаснее, чем токен CSRF времени сеанса (полустатический токен CSRF).

Он добавляет коды в модуль сеанса PHP, но реализация (патч для этого RFC ) проста и понятна.

Защита CSRF не относится к управлению сеансом

Задача сеанса, по определению, состоит в том, чтобы различать и управлять состоянием запросов. Сессия должна различать запросы, т.е. должна сохранять аутентичность. CSRF — очевидная проблема аутентичности. Некоторые из нас рассматривают диспетчер сеансов как хранилище, но этого недостаточно.

Можно утверждать, что «защита CSRF не является обязательным требованием для управления сеансом». Я согласен с этим аргументом. По крайней мере, сегодня это не считается обязательным.Однако «защита CSRF не относится к управлению сеансом» не может быть правильным, потому что аутентичность является основной характеристикой сеанса.

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

Как использовать с JS-приложениями?

Если страниц нет, вы можете использовать PHP-скрипт (get_csrf_token.php), упомянутый выше. Будьте осторожны с TTL, но не всегда получайте новый токен. Это пустая трата ресурсов.

Токены CSRF в URL-адресах (запросы GET) представляют угрозу безопасности

Да, это увеличивает риск уязвимости токена CSRF. Не рекомендуется для общедоступных веб-сайтов. Однако писали ли вы когда-нибудь простые веб-инструменты для своей среды разработки или работы? Вы реализовали полную защиту CSRF для каждого инструмента? Я не. Защита GET удобна для таких инструментов и обеспечивает мгновенную полную защиту от CSRF. 3)

URL можно вставить в чат / почту и т. Д., Но по умолчанию срок его действия истекает через 1800 секунд.

get_csrf_token.php кажется небезопасным

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

Должны ли все приложения использовать эту защиту CSRF?

Нет.Он работает для больших / сложных приложений, но можно использовать их собственную реализацию.

Например, у меня есть библиотека CSRF, которая обнаруживает как CSRF-атаку, так и множественные отправки. Модуль сеанса никогда не поддерживает обнаружение множественной отправки.

Обратно несовместимые изменения

Предлагаемая версия (и) PHP

RFC Impact

Новые константы

  • Статус проверки

    • SESSION_CSRF_DISABLED

    • SESSION_CSRF_INVALID

    • SESSION_CSRF_EXPIRED

    • SESSION_CSRF_VALID

php.ini по умолчанию

Все значения по умолчанию одинаковы

  • session.csrf_token_name = «SESSCSRF»

  • session.csrf_rewrite = SESSION_CSRF_NONE (0)

  • session.csrf_validate = SESSION_CSRF_NONE (0)

  • session.csrf_ttl = 1800 (секунды)

  • session.csrf_hash = «hmac-sha256»

  • session.csrf_domains = «»

  • session.csrf_error = E_RECOVERABLE_ERROR

Открытые выпуски

  1. Любые имена (функции / константы / и т. Д.) Могут быть изменены.Прокомментируйте, пожалуйста.

  2. Принцип работы может быть изменен. Прокомментируйте, пожалуйста.

  3. Преобразователь URL должен быть исправлен до этого RFC . (Есть проблема. Патч существует, но еще не применен)

Функциональность PHP без изменений

Сфера будущего

Предлагаемые варианты голосования

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

Укажите, требуется ли для этого проекта большинство в 2/3 или 50% + 1 (см. Голосование)

Патчи и тесты

Реализация

После реализации проекта этот раздел должен содержать

  1. версия (-и) она была объединена с

  2. ссылка на git commit (s)

  3. ссылка на ручной ввод PHP для функции

Список литературы

Ссылки на внешние ссылки, обсуждения или RFC

Отклоненные элементы

Обновляйте это с помощью функций, которые обсуждались в списках рассылки.

rfc / automatic_csrf_protection.txt · Последнее изменение: 22.09.2017 13:28 (внешнее редактирование)

.

Тест безопасности веб-сайта | Сканирование безопасности на соответствие GDPR и PCI DSS

тесты запускают тесты за
24 часа

ImmuniWeb Discovery

Для целей непрерывного мониторинга мы предлагаем вам изучить наше отмеченное наградами предложение ImmuniWeb® Discovery, предназначенное для непрерывного мониторинга с гибкими 24/7 уведомлениями .

Коммерческий API

ImmuniWeb предоставляет коммерческий доступ к API тестирования безопасности веб-сайта с расширенными ограничениями на количество ежедневных тестов. Пожалуйста, свяжитесь с нами, чтобы получить индивидуальное предложение. Цены начинаются от 1000 долларов в месяц.

Некоммерческие, исследовательские и академические учреждения могут запрашивать коммерческий API бесплатно. Пожалуйста, отправьте свои требования к использованию API для получения дополнительной информации.

Бесплатный API

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

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

Уведомление о лицензии: API предоставляется бесплатно как для частных, так и для коммерческих целей. При использовании бесплатного API обязательно наличие четко видимой ссылки на ImmuniWeb® Community при отображении результатов.Несоблюдение этого правила может повлечь за собой запрет и юридические последствия.

Документация и инструкции по API

Полная документация по API

Спецификации API

Имя поля Значение
Протокол HTTP / HTTPS
Тип запроса POST
URL https: // www.Immuniweb.com/websec/api/v1/chsec/[ustamp ].html — где «ustamp» — произвольная метка времени UNIX (должна быть целым числом). Такое построение сделано для предотвращения кеширования на стороне клиента.

POST Data Specification

Имя поля Значение
api_key секретный токен, который вы отправляете вместе с запросом
проверенный_url URL-адрес домен для тестирования.
dnsr «вкл.» Означает, что результаты теста будут скрыты, «выкл.» Означает, что результаты теста будут отображаться в статистике.
choosen_ip IP-адрес тестируемого сервера (если тестируемый домен разрешается на несколько адресов).
перепроверить «false» будет использовать результаты из кеша, если сервер был протестирован в течение последних 24 часов, «true» выполнит новый тест без просмотра кеша.
token значение токена, отправляемого сервером, если тестируемый домен разделен на несколько IP-адресов.

Пример транзакции с использованием CURL

$ curl -XPOST -d ‘Test_url = twitter.com & choosen_ip = any & dnsr = off & recheck = false & verbosity = 1’ ‘https://www.immuniweb.com/websec/api/v1/chsec / 1451425590.html ‘

{«debug»: true, «job_id»: «2a9e1f1bc92dc0c7a4bde930dff488771eea6d36988208d34163c5496227b8dc», «status»: «test_started», «status_id»:

, «сообщение» имеет значение «test_started»: ‘job_id = 2a9e1f1bc92dc0c7a4bde930dff488771eea6d36988208d34163c5496227b8dc’ ‘https://www.immuniweb.com/websec/api/v1/get_result/1451425590.html’

{ «job_id»: «2a9e1f1bc92dc0c7a4bde930dff488771eea6d36988208d34163c5496227b8dc», «статус»: «in_progress», «status_id» : 2, «message»: «Ваш тест выполняется»}

$ curl -XPOST -d ‘Test_url = twitter.com & choosen_ip = any & dnsr = off & recheck = false & verbosity = 1 » https://www.immuniweb.com/websec/api/v1/chsec/1451425590.html ‘

{«test_id»: «c84936eef26eeb8aafd2cdbdbd2bd2bdbdb8db8db8dbdb8db8db2db8db8dbdb8dbdb8db8db2fdb2fcdb8dbdbdb2fcdb8d2fcdfcdcfcdb8db2fdb2fdb2fcdb8db2 , «status_id»: 3, «message»: «Test is cached»}

$ curl -XPOST -d ‘id = c84936eef26eeb8aaef5ffc43f38ddb91adfd90ac27fb416bd0b21fe2edb1004’ ‘https://www.imweb14/get/ .html ‘

$ curl -XPOST -d’ проверенный_url = 0.0.0.0 & choosen_ip = any & dnsr = off & recheck = false & verbosity = 1 » https://www.immuniweb.com/websec/api/v1/chsec/1451425590.html ‘

{«error»: «Доменное имя не существует», «error_id»: 9}

Пример ответа сервера

Об услуге

Website Security Test — это бесплатный онлайн-продукт, предоставляемый и управляемый ImmuniWeb.

Тест безопасности веб-сайта выполняет следующие проверки безопасности и конфиденциальности:

Методология оценки 43

900 — В начале теста устанавливается оценка 100

— Баллы добавляются за хорошую и надежную настройку вашего веб-сайта и веб-сервера
— Баллы вычитаются за небезопасную, неполную или ненадежную настройку вашего веб-сайт или веб-сервер
— Суммарные баллы за все обнаруженные CMS и компоненты CMS не будут ниже -50 или выше +50
— Всего баллы для всех обнаруженных компонентов JS не будут ниже -20 или выше +20
— Общее количество баллов для всех методов HTTP и CSP не будет ниже -30 или выше +30
— Общее количество баллов для всех файлов cookie будет не опускаться ниже -10 или выше +10
— Ни один веб-сайт не может получить оценку выше «C», если обнаружено уязвимое программное обеспечение
— Ни один веб-сайт не может получить оценку выше «B +», если CMS не обновлена ​​
— Ни один веб-сайт не может получить оценку ниже «C», если его компоненты CMS и CMS не имеют известных уязвимостей.
Оценка Оценка
A + Оценка больше 100
A Оценка от 90 до 99
A- Оценка от 80 до 89
Оценка Оценка
B + Оценка от 70 до 79
B Оценка от 60 до 69
B- Оценка от 50 до 59
Оценка Оценка
C + Оценка от 35 до 49
C Оценка от 20 до 34
F Оценка ниже 20

Описание Оценка
W AF присутствует +20
WAF отсутствует-5
CMS обновлена ​​ +20
CMS не обновлена ​​-15
CMS не обновлена ​​и уязвим-50
Компонент CMS обновлен +15
Компонент CMS не обновлен-10
Компонент CMS не обновлен и уязвим-30
JS-компонент обновлен 2date +10
JS-компонент не обновлен-5
JS-компонент не обновлен и уязвим-30
Сервер поддерживает настраиваемые методы HTTP-10
Сервер поддерживает TRACE, TRACK или CONNECT HTTP метод-10
В cookie-файле не установлен флаг HttpOnly-5
В cookie-файле установлен флаг Secure +5
В cookie-файле установлен флаг SameSite установлен на Lax +5
У файла cookie флаг SameSite установлен на Strict +5
Для файла cookie не установлен флаг SameSite -1
Имя файла cookie имеет префикс __Secure- и его предварительные требования +5
Имя файла cookie имеет Префикс «__Host-» и его предварительные условия +5
Список каталогов веб-сервера включен-10
Веб-сайт использует ресурсы из сторонних доменов, которые не могут быть разрешены-30
Обнаружено вредоносное ПО для криптоджекинга-50

Имя заголовка Описание По HTTP По HTTPS
Expect-CT Заголовок присутствует и действителен 0 +25
Expect-CT Заголовок отсутствует или неправильно настроен 0-20
Политика разрешений Заголовок присутствует и действителен +15 +15
Разрешения-Po licy Заголовок присутствует и неправильно настроен-10-10
Access-Control-Allow-Origin Заголовок присутствует и действителен +5 +5
Strict-Transport -Безопасность Заголовок присутствует, действителен и применяется 0 +25
Strict-Transport-Security Заголовок отсутствует 0-20
Strict-Transport-Security Заголовок имеет продолжительность менее 6 месяцев 0-10
Strict-Transport-Security Сертификат сервера не является доверенным 0-1
X-Frame-Options Заголовок присутствует и действителен +15 +15
X-Frame-Options Значение заголовка: ALLOWALL-10-10
X-XSS-Protection Заголовок присутствует и действителен +20 +20
X-XSS-Protection 900 46

Значение заголовка 0 (отключено)-10-10
X-XSS-Protection Заголовок отсутствует-10-10
X-Content-Type-Options Заголовок присутствует и действителен +15 +15
X-Content-Type-Options Заголовок отсутствует-10-10
Content-Security-Policy Заголовок присутствует +20 +20 900 46
Content-Security-Policy Заголовок отсутствует-20-20
Content-Security-Policy Заголовок имеет default-src, установленный на «none» или «self» + 5 +5
Content-Security-Policy Заголовок содержит подстановочный знак в директиве default-src -10-10
Content-Security-Policy Заголовок содержит подстановочный знак в любой другой директиве-10-10
Content-Security-P olicy Заголовок содержит директиву frame-ancestors и ограничивает источники, а заголовок X-Frame-Options не установлен +10 +10
Content-Security-Policy Заголовок имеет директиву frame-ancestors, установленную с подстановочный знак и заголовок X-Frame-Options не заданы +5 +5
Content-Security-Policy Заголовок имеет установленную директиву frame-ancestors и соответствует значению заголовка X-Frame-Options + 5 +5
Заголовок имеет установленную директиву frame-ancestors и несовместим со значением заголовка X-Frame-Options-5-5
Content-Security-Policy Заголовок включает блокировку XSS и X -XSS-Protection заголовок не установлен +15 +15
Content-Security-Policy Заголовок включает XSS-фильтрацию, а заголовок X-XSS-Protection не установлен +15 +15
Content-Security-Policy Заголовок имеет набор директив Reflected-xss и соответствует значению заголовка X-XSS-Protection +5 +5
Content-Security-Policy Заголовок содержит директиву Reflected XSS с другим значением, чем X -XSS-Protection header-5-5
Content-Security-Policy Заголовок содержит запросы upgrade-insecure-requests или набор директив block-all-mixed-content +5 + 5
Сервер Заголовок раскрывает версию программного обеспечения сервера-5-5
X-Powered-By Заголовок раскрывает версию программного обеспечения сервера-5-5
X-AspNet-Version Заголовок раскрывает версию программного обеспечения сервера-5-5