1 Обзор
Эта статья не является большим и всеобъемлющим курсом, а представляет собой распространенную проблему в нашей повседневной жизни.Поскольку сетевая безопасность является большой темой, мы только знакомим вас с тем, что должны знать и знать фронтенд-инженеры. примерно включаяXSS
,CSRF
,点击劫持
,SQL注入
,OS注入
,请求劫持
,DDOS
, и простой防范策略
.
2. XSS
XSS
на английском языкеCross Site Scripting
Также известны как атаки с использованием межсайтовых сценариев, потому что аббревиатура иCSS
перекрываются, поэтому его можно назвать толькоXSS
, атака с использованием межсайтовых сценариев представляет собойWeb
Сайт работает незаконно в браузере зарегистрированного пользователяHTML
этикетка илиJavaScript
атака.
ТакXSS
Как обычно проводится атака? Предположим, естьinput
илиtextarea
Он используется для сбора данных, введенных пользователем. При нормальных обстоятельствах проблем не возникает. Предположим, что содержимое, введенное пользователем,<script>alert(1)</script>
. Когда мы передаем этот контент, введенный пользователем, черезinnnerHTML
При добавлении на страницу код запустится и появится всплывающее окно.alert
.
document.body.innerHTML = inputValue;
Можно обнаружить, что пользовательский вводjs
Скрипт может быть выполнен, что образует дыру в безопасности, и многие хакеры сначала проходятalert
способ проверить, может ли веб-сайт бытьXSS
, что означает, что вы можете запуститьjs
любой скрипт внутри. Пароль учетной записи, введенный пользователем без ведома пользователя, будет отправлен ему самим через запись хакера или черезjs
Перепишите страницу, чтобы отображались незаконные изображения, скопируйте статус входа пользователя на компьютер хакера, и хакер сможет использовать личность пользователя для работы и так далее.
в общемXSS
Существует два вида методов атаки, один из которых - через вышеупомянутыйinput
Метод атаки ввода называется типом хранения, то есть введенный пользователем контент будет храниться в базе данных, и он будет выполняться каждый раз при открытии страницы.url
Параметрическая атака называется типом отражения, если предположить, что наш веб-сайтurl
Переносимое содержимое отображается на странице.
http://localhost:8080/index.html?name=yd
Хакер может отправить пользователю ссылку, подобную следующей, которая запустит скрипт, как только пользователь его откроет.
http://localhost:8080/index.html?name=<script>alert(123)</script>
1.XSS
вред
Проще говоряjavascript
Он может делать все, что может.
-
Получить данные страницы
-
Получить куки
-
Изменить логику внешнего интерфейса
-
послать запрос
-
Получить информацию о пользователе и статус входа
-
обманывать пользователей
2.XSS
охранять от
- В шапке можно установить заголовок ответа X-XSS-Protection.По умолчанию XSS-атаки запрещены.При обнаружении XSS-атаки в url доступ к странице запрещен. Но его атака на тип хранилища недействительна и может перехватить только атаку инъекции в URL-адресе.
ctx.set('X-XSS-Protection', 0); // 允许XSS攻击
Существует четыре типа значений:
0: разрешить XSS-атаки
1: XSS-атака запрещена. При обнаружении атаки межсайтового скриптинга браузер очистит страницу (удалит небезопасные части)
1;mode=block включает фильтрацию XSS, при обнаружении атаки браузер не очистит страницу, а заблокирует загрузку страницы.
1report= включает фильтрацию XSS, при обнаружении атаки межсайтового скриптинга браузер очистит страницу и отправит отчет о нарушении, используя функциональность директивы CSP report-uri.
При нормальных обстоятельствах браузеры по умолчанию используют значение 1, что запрещает атаки XSS.
3. CSP
Политика безопасности контента (CSP Content Security Policy
) — это дополнительный уровень безопасности, используемый для обнаружения и смягчения определенных типов атак, в том числеXSS
и атаки с внедрением данных. Эти атаки могут использоваться для чего угодно: от кражи данных до саботажа веб-сайтов или распространения вредоносных программ.
CSP
По сути это установка вайтлиста.Разработчик четко говорит браузеру какие внешние ресурсы можно загружать и выполнять.Нам нужно только настроить правила.Как перехватывать реализовано самим браузером.Можно минимизировать таким образом .XSS
атака.
У него есть следующие стратегии для этой стратегии:
# 只允许加载本站资源
Content-Security-Policy: default-src 'self'
# 只允许加载HTTPS协议图片
Content-Security-Policy: img-src https://*
# 不允许加载任何来源框架
Content-Security-Policy: child-src 'none'
Как правило, атака заключается в том, что наш веб-сайт выполняет действия других веб-сайтов.js
скрипт, внедренный хакерскимjs
код. Предположим, что наш веб-сайт настроен так, чтобы код мог загружать только свой собственный веб-сайт, тогда внедренныйjs
Скрипт не может быть выполнен.
# 设置只允许执行自己网站的js脚本,
ctx.set('Content-Security-Policy', "default-src 'self'")
# 浏览器打开连接时4000端口的外部资源不能被加载
https://127.0.0.1:3000?from=<script src="http://127.0.0.1:4000/hack.js"></script>
4. Экранирующие символы
Пользовательскому вводу никогда нельзя доверять. Наиболее распространенной практикой является перевод выходного содержимого. Для кавычек, угловых скобок и косых черт перевод пользовательского содержимого выполняется с помощью следующих функций.
function escape(str) {
str = str.replace(/&/g, '&');
str = str.replace(/</g, '<');
str = str.replace(/>/g, '>');
str = str.replace(/"/g, '&quto;');
str = str.replace(/'/g, ''');
str = str.replace(/`/g, '`');
str = str.replace(/\//g, '/');
return str;
}
escape('<script>alert(123)</script>'); // <script>alert(123)</script>
Этот вид перевода называется «внимание к черному списку», который предназначен для перевода небезопасных вещей, таких как\<\>
, но есть ситуация, когда перевод черного списка выполнить невозможно.
Иногда нам приходится иметь дело с каким-то форматированным текстом, очевидно, что мы не можем перевести все символы вышеуказанным методом, потому что это также отфильтрует нужный формат.В этом случае мы обычно используем метод фильтрации белого списка, конечно, мы также можно использовать метод фильтрации по черному списку, но, учитывая, что слишком много тегов и атрибутов тегов необходимо отфильтровать, более рекомендуется использовать метод белого списка.
Метод белого списка позволяет пропускать некоторые безопасные символы, а все остальные символы должны быть переведены, рекомендуется использовать его здесь.xss
изnpm
пакет для обработки.
// 引入xss
const xss = require('xss');
let html = xss('<h1 id="title">XSS Demo</h1><script>alert("xss")</script>');
// <h1 id="title">XSS Demo</h1><script>alert("xss")</script>
console.log(html);
можно увидеть здесьxss
держалh1
Этикетка, потому что он был в безопасности, дляscript
Этикетка была переведена, потому что он неполный Ann.
Как правило, данные, введенные пользователем или изurl
Мы не рекомендуем использовать параметры, полученные вinnnerHTML
вставляется на страницу, за исключениемxss
модули иescape
метод также может ввестиhtml
шаблоны, общиеejs
шаблон.react
,vue
,angular
Ожидание, пока фреймворк поможет нам справиться с этим по умолчаниюxss
.
# 转译 inputValue 内容
<%= inputValue %>
# 不转移 inputValue 内容
<%- inputValue %>
5. HttpOnly Cookie
почему пользователиcookie
можно назвать, потому чтоjs
доступенcookie
Да, мы можем отключитьjs
доступcookie
способ предотвратить эту атаку.
это профилактикаXSS
Атака с целью кражи пользователейcookie
наиболее эффективные средства защиты,Web
приложение в настройкахcookie
, установите для его свойств значениеHttpOnly
, вы можете избежатьcookie
Вредоносный со стороны клиентаjavaScript
воровать, защищать пользователейcookie
Информация. То есть сервис настраиваетсяcookie
идти в ногу сHttpOnly
Вот и все.
response.addHeader('Set-Cookie', 'uid=112; path/; HttpOnly')
установить вот такcookie
,js
Доступ к нему невозможен.
Выше приведены некоторые основные средства защиты.XSS
средства нападения.CSP
,字符转译
,HttpOnly Cookie
.
6.CSRF
CSRF( Cross Site Request Forgery)
, то есть подделка межсайтовых запросов, что являетсяweb
Атака, которая использует личность вошедшего в систему пользователя, без ведома пользователя, имя пользователя для завершения незаконной операции. Проще говоря, шаг атаки прост.
Пользователь уже авторизован на сайтеA
, И вA
Сайт записывает статус входа (cookie
), вам не нужно снова входить в систему. Когда пользователь не вышел с сайтаA
В этом случае, то есть когда состояние входа в систему все еще действительно, доступ к опасным сайтам-приманкам, предоставляемым злоумышленникамиB
,B
вызов сайтаA
Интерфейс сайта, например интерфейс отправки. еслиA
сайт ничего не делаетCSRF
обороны, будут атакованы.
Принцип также очень прост, потому чтоB
сайт называетсяA
Интерфейс представления сайта, согласноcookie
Принцип соответствия, интерфейс какого сайта будет нести интерфейс какого сайтаcookie
, который несет информацию о присутствии пользователяA
местаcookie
, параметры, переданные интерфейсом отправки в это время, на самом делеB
предоставленный сайтом. Интерфейс был вызван от имени пользователя без ведома пользователя.
Многим может показаться, чтоB
вызов сайтаA
Интерфейс сайта кроссдоменный, как он может работать? Это ничего, кросс-доменная — это просто утверждение. Как правило, кросс-доменная означает, что внешний интерфейс не может получить возвращаемое значение интерфейса, но это не означает, что запрос не может быть отправлен. цель атаки, пока запрос отправляется.Какое возвращаемое значение?Это не имеет значения.
защитаCSRF
Есть три средства.
Во-первых, запретить сторонним веб-сайтам размещатьCookie
, но есть проблемы с совместимостью, второй способ - проверить, что запрос прошелreferrer
, судя по тому, является ли законнымreferrer
. На самом деле многие противоугонные сети провереныreferrer
Путь.
referrer
Это адрес передней страницы, которая отправляет запрос, доступ к которому можно получить черезreferrer
способ экранирования и фильтрации, но у него тоже проблемаhttps
не отправлятьreferrer
Да, так что это проблема совместимости.
В настоящее время наиболее эффективным способом является метод кода проверки или метод взаимодействия человека с компьютером.В прошлом пользователи могли быть переданы через CSRF, поскольку передача была относительно простой, но теперь базовая передача будет отправлять коды проверки, такие как проверка.
7. Кликджекинг
Clickjacking — это визуальная спуфинговая атака, при которой злоумышленник отправляет веб-сайт, который ему нужен для атаки, черезiframe
Вставьте его на свою веб-страницу вложенным способом и поместитеiframe
Установите прозрачность, показывая кнопку на странице, чтобы побудить пользователей щелкнуть.
Когда вы нажимаете кнопку, вы на самом деле нажимаетеiframe
на кнопку вiframe
Функция встраивания сайта, например, если вы хотите понравиться странице, вы можете пройти страницу черезiframe
камуфляж.
Защититься от этого на самом деле очень просто, просто установитеX-FRAME-OPTIONS
Заголовок ответа,X-FRAME-OPTIONS
Являетсяhttp
Заголовки ответа, которые хорошо поддерживаются в современных браузерах, этоhttp
Заголовок ответа предназначен для защитыiframe
Вложенные кликджекинговые атаки.
Заголовок ответа имеет три необязательных значения:
DENY
Указывает, что страница не может пройтиiframe
способ показать
SAMEORIGIN
Указывает, что страница может передаваться под тем же доменным именемiframe
способ показать
ALLOW-FROM
Указывает, что страница доступна в указанном источникеiframe
показать в
ctx.set('X-FRAME-OPTIONS', 'DENY')
Вы также можете напрямую использовать js, чтобы определить, находится ли он вiframe
, но этот метод также имеет проблемы. В случае кросс-домена внутренняя страница не может работать внешний слой.location
из.
if (self !== top) {
top.location.href = self.location.href; // 将外层的location修改为内层的location
document.body.innnerHTML = ''; // 清除页面内容
}
8. SQL-инъекция
SQL
Инъекция — одна из наиболее распространенных сетевых атак, она не использует операционную систему.BUG
Добиться атаки, но за невнимательность программиста при написании, черезSQL
заявление, чтобы не добиться входа в учетную запись и даже вмешиваться в базу данных.SQL
Инъекционная атака больше тяготеет к back-end, и фронтенд-студенты могут ее понять.
Предположим, нашsql
Выглядит это так, запрашивая, есть ли имя пользователя в таблице пользователей базы данныхuserName
переменная, парольpassword
переменный пользователь.
const sql = 'select * from user_table where username= "'+ userName +'" and password = "' + password + '"';
Нет проблем, когда пользователь вводит правильное имя пользователя и пароль
const userName = 'yd';
const password = '123456';
const sql = 'select * from user_table where username= "'+ userName +'" and password = "' + password + '"';
// select * from user_table where username= "yd" and password = "123456"
Но если пароль, введенный хакером,1"or"1"="1
Будет проблема, это правило, которое всегда можно успешно выполнитьsql
.username="yd" and password= or 1=1
; Хэн установилsql
.
const userName = 'yd';
const password = '1"or"1"="1';
const sql = 'select * from user_table where username= "'+ userName +'" and password = "' + password + '"';
// select * from user_table where username= "yd" and password = "1" or"1"="1"
В общем, мы не допускаем сращиванияsql
Да, рекомендуется использовать параметризованный интерфейс запросов, предоставляемый базой данных, для всех операторов запросов.Параметрические операторы используют параметры вместо встраивания входных переменных пользователя вSQL
В заявлении ни прямой сплайсингSQL
утверждения, такие какNode.js
серединаmysqljs
в библиотекеquery
метод.
const sql = ` SELECT * user_table WHERE username = ? AND password = ?`
res = await mysql.query(sql, [ctx.request.body.username, ctx.request.body.password]);
Кроме того, строго ограничиватьweb
Полномочия эксплуатации базы данных приложения предоставляют пользователю минимальные полномочия, которые могут удовлетворить только его работу, тем самым сводя к минимуму вред инъекционных атак на базу данных.Внутренний код проверяет, соответствуют ли входные данные ожиданиям, и строго ограничивает типы переменных, например Выполнить некоторую обработку сопоставления с использованием регулярных выражений. специальные символы для входа в базу(',",\,<,>,&,*,;)
и т. д., выполнить обработку перевода или преобразование кода**
. В основном все языки бэкенда имеют методы для транспиляции строк, такие какlodash
изlodash._escapehtmlchar
библиотека.
9. Внедрение команд ОС
OS
ввод команд иSQL
Инъекция почти такая же, за исключением того, чтоSQL
Инъекция предназначена для базы данных, иOS
Внедрение команд предназначено для операционной системы,OS
Атаки с внедрением команд относятся кweb
приложение, выполнять недопустимые команды операционной системы для достижения цели атаки, если оно может вызватьshell
Где есть функция риска быть атакованным, если вызовshell
Если есть пропуск, вставленная недопустимая команда может быть выполнена.
кNode.js
Например, для добавления интерфейса требуетсяgithub
Загрузка указанных пользователем элементов
const exec = require('mz/child_process').exec;
const params = { /* 用户输入的参数 */};
exec(`git clone ${params.repo}/some/path`);
Что, если переданные параметры следующие
https://github.com/xx/xx.git && rm -rf /* &&
В это время, если разрешения пользователя слишком велики, он выполнитrm -rf /*
, удалить весь контент с сервера.
10. Запросить угон
Нижеследующая концепция не является нашей концепцией интерфейса, но она очень часто используется, я также расскажу об этом здесь и разберусь с ней.
Существует два типа перехвата запросов, один из нихDNS
угон, аHTTP
угнать.
DNS
Сервер также является сервером доменных имен, который преобразует доменное имя вip
Если адрес подделан, перенаправляемый веб-сайт не является предполагаемым веб-сайтом. Один из наших компьютеровhost
файл, то есть локальныйDNS
, если встретишьDNS
Угонщик может просматривать локальныеhost
Был ли файл подделан.
HTTP
Угоны встречаются чаще.HTTP
Это передача открытого текста, и весьма вероятно, что ссылка в середине проекта передачи была изменена. Например, мы часто сталкиваемся с такой ситуацией, мы связываем ж/д вокзал с ж/д вокзалом.wifi
, в это время, какую бы страницу мы ни открывали, мы авторизованыwifi
страница. На самом деле это вмешательство в сайт, который вы посещаете на уровне маршрутизатора, не переходя по ссылке оператора.
HTTP
Угон можно только улучшитьHTTPS
, потому что он сам по себе является передачей открытого текста.
11.DDOS
Вот ссылка на блог г-на Жуань Ифэна [DDOS 攻击的防范教程
].
DDOS
Это не атака, а общий термин для большой категории атак, их видов десятки, и постоянно изобретаются новые методы атак, каждая ссылка в работе сайта может быть целью атаки. Пока одна связь нарушена, так что весь процесс не может работать, цель парализовать службу достигнута.
Одной из наиболее распространенных атак являетсяCC
атака. Он просто и грубо отправлял большое количество обычных запросов, которые превышали максимальную мощность сервера, что приводило к простоям.
То, с чем я столкнулся, былоCC
Атаки, большую часть времени по всему миру20
несколькоIP
Адреса делают запросы по очереди, и запросы для каждого адреса выполняются каждую секунду.200 ~ 300
Когда я смотрю на лог доступа, я чувствую, что эти запросы льются потоком, в мгновение ока их очень много, через несколько минут размер лог-файла увеличится.100MB
.
Честно говоря, это можно считать мелкой атакой, но мой личный сайт ничем не защищен, а сервер до сих пор используется совместно с другими людьми, такой трафик отключается, как только он приходит.
этот токDDOS
Метод атаки обычно не доходит до самого вашего сервера, потому что после прихода большого количества запросов велика вероятность того, что все маршрутизаторы в машинном зале будут полностью заняты, и запросы уже не смогут дойти до уровня сервера. в этом случае оператор будет напрямую сервер находится в автономном режиме. Следовательно, уровень сервера в принципе не так прост в управлении.
Мы можем сделать резервную копию веб-сайта, то есть у вас есть резервная копия веб-сайта или хотя бы временная домашняя страница. В случае, если рабочий сервер отключится, вы можете сразу переключиться на резервный сайт, так что выхода нет.
Резервный веб-сайт не обязательно полнофункциональный. Если его можно полностью просматривать статически, он может удовлетворить потребности. Как минимум, должна быть возможность отображать объявление, сообщающее пользователям, что с сайтом возникла проблема и что она усердно работает над ее устранением. Такую временную домашнюю страницу рекомендуется размещать на веб-сайтах с большой пропускной способностью и способных противостоять атакам.
также черезHTTP
Перехват запроса, если есть характеристика, то с ним очень просто бороться: напрямую его перехватывать, можно перехватывать в железе, серверах, файрволах.
HTTP
Перехват исходит из того, что запрос должен иметь характеристики. Однако реальнаяDDOS
Атака безликая, ее запрос выглядит так же, как обычный запрос, и исходит от другогоIP
адрес, так что нет никакого способа перехватить его. поэтомуDDOS
особенно трудно предотвратить.
DDOS
Стоимость атаки все еще относительно высока, мы можем пройти宽带扩容 + CDN
способ увеличить стоимость атаки.
12. Рептилия
Сканеры могут сканировать содержимое веб-сайта,Node
можно использовать вcheerio
а такжеhttps
модуль для демонстрации.
const cheerio = require('cheerio');
const https = require('https');
let html = '';
const $ = '';
https.get('url', res => {
res.on('data', data => {
html += data; // 保存返回的数据
});
res.on('finish', () => {
$ = cheerio.load(html); // cheerio解析数据
// $就是拿到的dom树, 想jq一样。
})
})
cheerio
использование похоже наjquery
,https
Ты можешь отправитьhttps
просить. существуетfinish
Метод указывает, что страница полученаhtml
.
Есть много способов защититься от рептилий. Например, для проверки браузераUA
,referrer
или проверочный код. Например, проверьте количество посещений в единицу времени и количество посещений.
Также можно спутать ключевую информацию с картинками, например, для какого-то текста мы напрямую разрешаем интерфейсу возвращать картинки для рендеринга. самSPA
Одна страница — это средство защиты от сканирования, но один из ее самых больших недостатков заключается в том, что она не дружелюбна к поисковым системам. Поисковые системы используют технологию сканирования. Так это вышло позжеSSR
Рендеринг для решения этой проблемы.
Также есть несколько более продвинутых методов защиты, которые являются некоторыми техническими ограничениями фронтенда.
Метод нарушения порядка шрифта, сервис возвращается во внешний интерфейсhtml
, текст не соответствует тому, что видит пользователь, например тому, что возвращает служба.div
Общее содержание4998
, и то, что действительно показывает страница,1995
, его подход также очень прост, с использованием специальной библиотеки шрифтов, потому что при рендеринге шрифта он будет искать библиотеку шрифтов и отображать ее в виде библиотеки шрифтов. В этой библиотеке шрифтов4
вести переписку1
,8
вести переписку5
, Это оно.
Вы также можете использовать важные шрифты на веб-сайте для создания изображений черезiconfont
способ рендеринга.
Существует такжеcanvas
Метод защиты от отпечатков пальцев,canvas
Смысл отпечатков пальцев в том, что разные аппаратные парыcanvas
Поддержка разная, поэтому рисовать нужно только очень сложноеcanvas
, то получаемimage
, всегда есть ошибка на уровне пикселей. Учитывая, что код сканера унифицирован, даже еслиselenium
,Слишкомghost
, поэтому отпечатки пальцев в целом непротиворечивы, поэтому вероятность обхода очень мала. Но на самом деле это не так, отечественные компании обычноIT
Унифицированная установка, как программное, так и аппаратное обеспечение удивительно согласованы. такcanvas
Сходство отпечатков пальцев особенно велико.
Наконец-то вы можете сами узнать о безголовом браузере, это действительно артефакт.