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

83 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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)