freeCodeCamp/guide/russian/php/security/cross-site-scripting/index.md

7.0 KiB
Raw Blame History

title localeTitle
Cross Site Scripting Скрипты для сайта

Скрипты для сайта

Cross Site Scripting - это тип уязвимости в веб-приложении, вызванный тем, что программист не дезинфицирует входные данные перед выдачей ввода в веб-браузер (например, комментарий к блогу). Он обычно используется для запуска вредоносного javascript в веб-браузере для совершения таких атак, как кража сеансовых файлов cookie среди других вредоносных действий для получения привилегий более высокого уровня в веб-приложении.

Пример атаки на скрипт

Блог позволяет пользователям создавать свои комментарии с помощью HTML-тегов, однако сценарий, запускающий блог, не выделяет теги <script> позволяющие любому пользователю запускать javascript на странице. Злоумышленник может использовать это в своих интересах для запуска вредоносного javascript в браузере. Они могут заражать пользователей вредоносным ПО, кражи сеансовых файлов и т. Д.

<script> 
  alert('Cross Site Scripting!'); 
 </script> 

Защита вашего сайта от межсайтовых скриптовых атак в PHP

В PHP есть две основные функции: htmlspecialchars() и strip_tags() , встроенные для защиты от атак с межсайтового скриптинга.

Функция htmlspecialchars($string) предотвратит отображение HTML-строки в виде HTML и отображение ее в виде обычного текста в веб-браузере. Пример кода htmlspecialchars ()

<?php 
 $usercomment = "<string>alert('Cross Site Scripting!');</script>"; 
 echo htmlspecialchars($usercomment); 

Другим подходом является strip_tags($string, $allowedtags) которая удаляет все теги HTML, за исключением HTML-тегов, которые вы указали в белый список. Важно отметить, что с помощью функции strip_tags() вы должны быть более осторожны, эта функция не мешает пользователю включать javascript в качестве ссылки, вам придется самостоятельно дезинформировать его.

Пример примера strip_tags ()

<?php 
 $usercomment = "<string>alert('Cross Site Scripting!');</script>"; 
 $allowedtags = "<p><a><h1><h2><h3>"; 
 echo strip_tags($usercomment, $allowedtags); 

Установка заголовка X-XSS-Protection:

В PHP вы можете отправить заголовок X-XSS-Protection Header, который будет указывать браузерам на проверку отраженной атаки Cross Site Scripting и блокировку загрузки страницы. Это не мешает всем атакам сценариев межсайтового взаимодействия только отражать их и их следует использовать в сочетании с другими методами.

<?php 
 header("X-XSS-Protection: 1; mode=block"); 

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

Защита вашего сайта от атак с использованием межсайтовых скриптов с помощью политики безопасности контента

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

Задайте политику безопасности содержимого как заголовок HTTP

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

Пример политики безопасности контента, заданной в заголовке HTTP

<?php 
 header("content-security-policy: default-src 'self'; img-src https://*; child-src 'none';"); 

Установите политику безопасности контента как метатег

Вы можете включить свою политику безопасности контента в HTML-страницу страницы и установить ее на странице. Этот метод требует, чтобы вы установили на каждой странице или потеряли преимущество политики.

Пример политики безопасности контента, установленной в метатеге HTML

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';"> 

Дополнительная информация: