1.XSS
XSS (межсайтовый скриптинг) — наиболее распространенная проблема безопасности внешнего интерфейса. XSS — это уязвимость компьютерной безопасности в веб-приложениях, которая позволяет злоумышленникам внедрять код на страницы, предоставляемые другим пользователям.Злоумышленник вводит незаконные HTML-теги или код javascript, чтобы, когда пользователь просматривает веб-страницу, контролировал браузер пользователя.
категория
1. Тип DOM xss
Используйте недостатки в самом DOM для атаки.
В следующем коде изображение на странице получает путь. Среди них возвращенные {{img.src}}='/xxx' onerror='/xxx'
, тег img становится<img src="/xxx" onerror=xxx">
. src точно не загрузится, и тогда для достижения эффекта атаки будет выполнен внедренный в onerror вредоносный код.
<img src="{{img.src}}">
2. Светоотражающий xss
Отраженный XSS, также известный как непостоянный XSS, на сегодняшний день является одной из наиболее подверженных XSS-уязвимостям. Код XSS появляется в URL-адресе и выполняет атаку, заставляя пользователя щелкнуть вредоносную ссылку, ведущую на целевой веб-сайт.
Следующая вредоносная ссылка, где xxx — вредоносный код. После того, как данные параметра, переданные на сервер, будут получены сервером, если страница ответа содержит переменные данные, вредоносный код будет внедрен на страницу для атаки.
http://www.abc.com?data=xxx
3. Сохранено xss
Сохраненный XSS также известен как постоянный XSS. Это наиболее опасный тип межсайтового скриптинга. По сравнению с отраженным XSS и DOM XSS, он имеет более высокую скрытность, поэтому он более вредоносен. Он не требует ручного запуска пользователями.
Когда злоумышленник отправляет фрагмент кода XSS, он принимается и сохраняется сервером.Когда все браузеры посещают страницу, они будут XSS.Наиболее типичный пример — доска объявлений.
решение
1. Фильтр.
Отфильтруйте ввод пользователя, добавив<>
''
""
Экранируйте такие символы, удалите узел Style, узел Script и узел Iframe, введенные пользователем.
function filterXss(str){
var s = "";
if(str.length == 0) return "";
s = str.replace(/&/g,"&");
s = s.replace(/</g,"<");
s = s.replace(/>/g,">");
s = s.replace(/ /g," ");
s = s.replace(/\'/g,"'");
s = s.replace(/\"/g,""");
return s;
}
2. Кодирование
Соответствующее кодирование выполняется в соответствии с контекстом, в котором находятся выходные данные. Данные размещаются в элементах HTML и должны быть закодированы в формате HTML, а также размещены в URL-адресах, требуется кодирование URL-адресов. Кроме того, существует кодировка JavaScript, кодировка CSS, кодировка атрибутов HTML, кодировка JSON и многое другое.
3.httpOnly
Установите атрибут HttpOnly в файле cookie, чтобы сценарий js не мог прочитать информацию файла cookie.
2.CSRF
Полное название CSRF (подделка межсайтовых запросов) — подделка межсайтовых запросов. Относится к злоумышленнику, притворяющемуся пользователем, чтобы инициировать запрос (без ведома пользователя) и выполнить что-то против воли пользователя. Процесс атаки показан на следующем рисунке:
решение
1. Используйте токен
Сервер генерирует токен и сохраняет его в сеансе, и в то же время отправляет токен клиенту.Клиент приносит токен при отправке формы.Сервер проверяет, соответствует ли токен сеансу, и если они согласовано, доступ разрешен, в противном случае доступ запрещен.
2. Проверка реферата
Специализация относится к источнику страницы, что означает, что только запрос принимается, сервер ответит; если нет, это перехватят.
3. Используйте код подтверждения
Для важных запросов попросите пользователя ввести капчу, заставив пользователя взаимодействовать с приложением, чтобы выполнить окончательный запрос.
3. Кликджекинг
Clickjacking заключается в том, чтобы сделать опасный веб-сайт прозрачным, а затем установить над ним кнопку, при нажатии на которую будут срабатывать определенные события вредоносного веб-сайта внизу.
решение
1. Установите заголовок ответа HTTP X-Frame-Options
Заголовок ответа HTTP X-Frame-Options используется, чтобы указать браузеру, разрешена ли страница или нет.<frame>
, <iframe>
или<object>
знак показан в . Веб-сайты могут использовать эту функцию, чтобы убедиться, что их собственный контент не встроен в чужой веб-сайт.
2. Используйте политику безопасности содержимого CSP (Content Security Policy).
4. Небезопасные сторонние зависимости
В настоящее время при разработке приложений, будь то серверное приложение или разработка внешнего интерфейса, большую часть времени мы используем среды разработки и различные библиотеки классов для быстрой разработки. Однако некоторые сторонние зависимости или подключаемые модули имеют много проблем с безопасностью и уязвимостей, поэтому используйте их с осторожностью.
решение
1. Минимизируйте сторонние зависимости и используйте относительно зрелые пакеты зависимостей.
2. Используйте автоматизированные инструменты, чтобы проверить, есть ли у этих сторонних кодов проблемы с безопасностью, такие как NSP (платформа безопасности узла), Snyk и т. д.
5. Взлом данных локального хранилища
Для удобства многие разработчики хранят некоторую личную информацию прямо в локальном файле или cookie без шифрования, что очень небезопасно, и хакеры могут легко получить информацию о пользователе.
решение
1. Не хранить важные данные локально
Конфиденциальная информация не должна храниться локально.
2. Шифрование
Вся информация в файле cookie или информация в localStorage должна быть зашифрована.Для шифрования вы можете определить некоторые методы шифрования самостоятельно или найти некоторые зашифрованные плагины в Интернете, или использовать base64 для многократного шифрования, а затем многократного декодирования.