83 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Cross Site Scripting | |||
|  | localeTitle: Скрипты для сайта | |||
|  | --- | |||
|  | ## Скрипты для сайта
 | |||
|  | 
 | |||
|  | Cross Site Scripting - это тип уязвимости в веб-приложении, вызванный тем, что программист не дезинфицирует входные данные перед выдачей ввода в веб-браузер (например, комментарий к блогу). Он обычно используется для запуска вредоносного javascript в веб-браузере для совершения таких атак, как кража сеансовых файлов cookie среди других вредоносных действий для получения привилегий более высокого уровня в веб-приложении. | |||
|  | 
 | |||
|  | ### Пример атаки на скрипт
 | |||
|  | 
 | |||
|  | Блог позволяет пользователям создавать свои комментарии с помощью HTML-тегов, однако сценарий, запускающий блог, не выделяет теги `<script>` позволяющие любому пользователю запускать javascript на странице. Злоумышленник может использовать это в своих интересах для запуска вредоносного javascript в браузере. Они могут заражать пользователей вредоносным ПО, кражи сеансовых файлов и т. Д. | |||
|  | 
 | |||
|  | ```HTML | |||
|  | <script>  | |||
|  |   alert('Cross Site Scripting!');  | |||
|  |  </script>  | |||
|  | ``` | |||
|  | 
 | |||
|  | ### Защита вашего сайта от межсайтовых скриптовых атак в PHP
 | |||
|  | 
 | |||
|  | В PHP есть две основные функции: `htmlspecialchars()` и `strip_tags()` , встроенные для защиты от атак с межсайтового скриптинга. | |||
|  | 
 | |||
|  | Функция `htmlspecialchars($string)` предотвратит отображение HTML-строки в виде HTML и отображение ее в виде обычного текста в веб-браузере. **Пример кода htmlspecialchars ()** | |||
|  | 
 | |||
|  | ```PHP | |||
|  | <?php  | |||
|  |  $usercomment = "<string>alert('Cross Site Scripting!');</script>";  | |||
|  |  echo htmlspecialchars($usercomment);  | |||
|  | ``` | |||
|  | 
 | |||
|  | Другим подходом является `strip_tags($string, $allowedtags)` которая удаляет все теги HTML, за исключением HTML-тегов, которые вы указали в белый список. Важно отметить, что с помощью функции `strip_tags()` вы должны быть более осторожны, эта функция не мешает пользователю включать javascript в качестве ссылки, вам придется самостоятельно дезинформировать его. | |||
|  | 
 | |||
|  | **Пример примера strip\_tags ()** | |||
|  | 
 | |||
|  | ```php | |||
|  | <?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 | |||
|  | <?php  | |||
|  |  header("X-XSS-Protection: 1; mode=block");  | |||
|  | ``` | |||
|  | 
 | |||
|  | **Написание собственной функции дезинфекции** Другой вариант, если вы хотите получить больше контроля над тем, как работает санитария, заключается в том, чтобы написать собственную функцию санитаризации HTML, это не рекомендуется для начинающих PHP, поскольку ошибка сделает ваш сайт уязвимым. | |||
|  | 
 | |||
|  | ### Защита вашего сайта от атак с использованием межсайтовых скриптов с помощью политики безопасности контента
 | |||
|  | 
 | |||
|  | Эффективный подход к предотвращению атак на сценарии межсайтового сценария, который может потребовать больших корректировок в структуре и базе данных вашего веб-приложения, заключается в использовании политики безопасности контента. | |||
|  | 
 | |||
|  | #### Задайте политику безопасности содержимого как заголовок HTTP
 | |||
|  | 
 | |||
|  | Наиболее распространенным способом установки политики безопасности контента является установка его непосредственно в заголовке HTTP. Это можно сделать с помощью веб-сервера, отредактировав его конфигурацию или отправив его через PHP. | |||
|  | 
 | |||
|  | **Пример политики безопасности контента, заданной в заголовке HTTP** | |||
|  | 
 | |||
|  | ```php | |||
|  | <?php  | |||
|  |  header("content-security-policy: default-src 'self'; img-src https://*; child-src 'none';");  | |||
|  | ``` | |||
|  | 
 | |||
|  | #### Установите политику безопасности контента как метатег
 | |||
|  | 
 | |||
|  | Вы можете включить свою политику безопасности контента в HTML-страницу страницы и установить ее на странице. Этот метод требует, чтобы вы установили на каждой странице или потеряли преимущество политики. | |||
|  | 
 | |||
|  | **Пример политики безопасности контента, установленной в метатеге HTML** | |||
|  | 
 | |||
|  | ```HTML | |||
|  | <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">  | |||
|  | ``` | |||
|  | 
 | |||
|  | #### Дополнительная информация:
 | |||
|  | 
 | |||
|  | *   [OWASP Wiki - Скрипты между сайтами](https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)) | |||
|  | *   [Руководство пользователя php.net strip\_tags ()](https://secure.php.net/manual/en/function.strip-tags.php) | |||
|  | *   [Руководство пользователя php.net htmlspecialchars ()](https://secure.php.net/manual/en/function.htmlspecialchars.php) | |||
|  | *   [MDN - Политика безопасности контента (CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) |