В области веб-безопасности наиболее распространенными методами атак являются XSS и CSRF. В этой статье кратко представлены атаки и защита XSS и CSRF.
Атака XSS (межсайтовый скрипт)
Атака XSS относится к методу атаки, при котором злоумышленник внедряет вредоносный код на стороне клиента в веб-сайт и вмешивается в веб-страницу на стороне клиента с помощью вредоносных сценариев, чтобы контролировать браузер пользователя или получать личные данные пользователя, когда пользователь просматривает веб-сайт. страница в Интернете.
Злоумышленник для внедрения вредоносных страниц сценария клиента обычно включает JavaScript, иногда содержащий HTML и Flash. Существует много способов XSS-атак, но у них есть общие черты: некоторые личные данные, такие как cookie, сеанс для злоумышленника, перенаправление жертвы на сайт, контролируемый злоумышленником, некоторые вредоносные действия на машине жертвы.
Атаки XSS можно разделить на 3 категории: отражающие (непостоянные), хранимые (постоянные) и основанные на DOM.
XSS в основном отправляет сценарии js через поля ввода и другие формы и, наконец, выполняется на странице.
Предотвращение XSS-атак
Основные браузеры теперь имеют встроенную защиту от XSS, например CSP. Но разработчикам также следует искать надежные решения для предотвращения XSS-атак.
HttpOnly предотвращает захват файлов cookie
HttpOnly был впервые предложен Microsoft и с тех пор стал стандартом. Браузер предотвратит доступ Javascript страницы к файлам cookie с атрибутом HttpOnly.
Как упоминалось выше, злоумышленники могут получить информацию о пользовательских файлах cookie, внедрив вредоносные скрипты. Обычно файл cookie содержит учетные данные пользователя для входа в систему.После того, как злоумышленник получит файл cookie, он может запустить атаку с перехватом файла cookie. Таким образом, строго говоря, HttpOnly не предотвращает атаки XSS, но может предотвратить атаки перехвата файлов cookie после атак XSS.
входная проверка
Не доверяйте никакому вводу от пользователя.Любой ввод пользователя проверяется, фильтруется и экранируется. Создайте белый список доверенных символов и тегов HTML, а также отфильтруйте или закодируйте символы или теги, которых нет в белом списке.
В защите XSS проверка ввода обычно заключается в проверке того, содержат ли данные, вводимые пользователем, специальные символы, такие как , и если да, фильтрация или кодирование специальных символов, что также называется фильтром XSS.
В некоторых интерфейсных фреймворках будет decodingMap, который используется для кодирования или фильтрации специальных символов или тегов, содержащихся в пользовательском вводе, таких как , script, для предотвращения XSS-атак:
// vuejs 中的 decodingMap
// 在 vuejs 中,如果输入带 script 标签的内容,会直接过滤掉
const decodingMap = {
'<': '<',
'>': '>',
'"': '"',
'&': '&',
' ': '\n'
}
выходная проверка
Будут проблемы с пользовательским вводом и будут проблемы с серверным выводом. Вообще говоря, помимо вывода форматированного текста, когда переменная выводится на HTML-страницу, для защиты от XSS-атак можно использовать кодирование или экранирование. Например, используйте sanitize-html, чтобы регулярно фильтровать выводимый контент и затем выводить его на страницу.
CSRF (Cross Site Request Forgery)
CSRF, или подделка межсайтовых запросов, в китайском переводе это подделка межсайтовых запросов, метод атаки, который перехватывает доверенных пользователей для отправки неожиданных запросов на сервер.
Обычно CSRF-атака заключается в том, что злоумышленник использует файл cookie жертвы, чтобы обмануть доверие сервера, и может подделать запросы от имени жертвы и отправить их на атакуемый сервер без ведома жертвы, чтобы выполнить без авторизации. защита.
Исходя из того, что пользователь вошел на целевой сайт, злоумышленник получает доступ к фишинговому веб-сайту злоумышленника. Злоумышленник напрямую вызывает интерфейс целевого сайта через URL-адрес, чтобы подделать поведение пользователя для атаки. Обычно пользователь не знает о это поведение.
Предотвращение CSRF-атак
В настоящее время существуют в основном следующие способы предотвращения CSRF-атак.
проверяющий код
Капча считается наиболее лаконичной и эффективной защитой от CSRF-атак.
Как видно из приведенных выше примеров, CSRF-атаки часто создают сетевые запросы без ведома пользователя. Captcha, с другой стороны, заставляет пользователя взаимодействовать с приложением, чтобы выполнить окончательный запрос. Потому что обычно проверочный код может сдерживать CSRF-атаки.
Но проверочный код не является панацеей, поскольку, по мнению пользователя, проверочный код не может быть добавлен ко всем операциям на сайте. Поэтому CAPTCHA можно использовать только как вспомогательное средство защиты от CSRF, а не как основное решение.
Referer Check
В соответствии с протоколом HTTP в заголовке HTTP есть поле Referer, которое записывает исходный адрес HTTP-запроса. С помощью Referer Check можно проверить, исходит ли запрос из законного «источника».
Например, если пользователь хочет удалить собственный пост, ему сначала нужно авторизоваться на сайте www.c.com, затем найти соответствующую страницу и инициировать запрос на удаление поста. На данный момент значение Referer равноwww.c.com; Когда запрос делается с www.a.com, значение Referer равноwww.a.com. Поэтому для защиты от CSRF-атак необходимо только проверять значение Referer каждого запроса на удаление публикации.Если это доменное имя, начинающееся с www.c.com, это означает, что запрос исходит от самого веб-сайта и является законным. . Если Referer является другим веб-сайтом, это может быть атака CSRF, и запрос может быть отклонен.
Для приведенного выше примера вы можете добавить на сервер следующий код:
if (req.headers.referer !== 'http://www.c.com:8002/') {
res.write('csrf 攻击');
return;
}
Referer Check может не только предотвратить CSRF-атаки, но и еще один сценарий применения — «предотвращение хотлинкинга изображений».
Добавить проверку токена
Причина, по которой атака CSRF является успешной, заключается в том, что злоумышленник может полностью подделать запрос пользователя, а вся информация об аутентификации пользователя в запросе существует в файле cookie, поэтому злоумышленник может напрямую использовать самого пользователя, не зная информации об аутентификации. пройти проверку безопасности. Для защиты от CSRF ключевым моментом является размещение в запросе информации, которую злоумышленник не может подделать, и этой информации нет в файле cookie. В HTTP-запрос может быть добавлен случайно сгенерированный токен в виде параметра, а на стороне сервера может быть установлен перехватчик для проверки токена.Если в запросе нет токена или содержимое токена неверно, считается атакой CSRF, и запрос отклоняется.
Суммировать
В этой статье в основном представлены принципы атаки и меры защиты XSS и CSRF. Конечно, в области веб-безопасности, помимо этих двух распространенных методов атаки, существуют и другие методы атаки, такие как SQL-инъекция, которые не входят в рамки этой статьи.Если вам это интересно, вы можете прочитать рубрика на тему технологии SQL-инъекций Подробнее об этом. Наконец, подведем итоги общих средств защиты от атак XSS и CSRF:
- Защита от XSS-атак
- HttpOnly предотвращает захват файлов cookie
- Проверка пользовательского ввода
- Проверка вывода на стороне сервера
- Защита от CSRF-атак
- проверяющий код
- Referer Check
- Проверка токена