Эта статья должна стать для вас отправной точкой для ознакомления с существующими стандартами веб-безопасности, наиболее распространенными веб-атаками и методами их предотвращения. В конце вы также узнаете, как и почему Он был всеобщим героем. (я думаю, кроме Руперта Мердока)
Совместное использование ресурсов из разных источников, или CORS, является функцией безопасности IE10+, Chrome 4+, Firefox 3.5+ или почти всех версий браузера, выпущенных после 2012 года, за исключением Opera Mini.
Когда ЯДРА настроены на сервере, доступном в домене website.com |/затем ресурсы из этого домена, которые запрашиваются через AJAX, должны быть инициированы из ресурсов, которые обслуживаются из того же домена.
Другими словами, если мы включим CORS на domain-b.com
и настройте его так, чтобы разрешать только ПОЛУЧАТЬ
запросы от домена Другими словами, если мы включим CORS на
domain-b.com и настройте его так, чтобы разрешать только
ПОЛУЧАТЬ запросы от домена
затем, если вы хотите использовать изображение, доступное в разделе https://domain-b.com/images/example.png
в canvas на вашем веб-сайте, который размещен на
Конфигурация CORS
ЯДРА отключены по умолчанию/|, что означает, что нет соответствующего серверного обработчика, который будет настраивать CORS, что означает, что вы не можете получить доступ к ресурсам из другого источника в вашем XHR. В принципе, если вы ничего не делаете или специально включаете CORS только для определенных доменов, то любой запрос AJAX, пытающийся получить доступ к вашим ресурсам, будет отклонен, поскольку веб-браузеры уважают политику CORS .
Это причина, по которой вы сталкиваетесь с проблемой CORS , когда начинаете разрабатывать SPA с использованием VueJS и NodeJS. Ваше приложение Vue JS размещено на http://localhost:8080 и когда вы пытаетесь получить доступ к серверному приложению NodeJS на
http://localhost:8000 вы получаете "
Заголовок Access-Control-Allow-Origin отсутствует ", потому что это два разных
ПРОИСХОЖДЕНИЕ (комбинация
ПРОТОКОЛА , |/ХОСТ
и ПОРТ/| ).
Классное решение проблемы CORS в режиме разработки VueJS заключается в установке прокси-сервера dev в вашем vue.config.js
файл следующим образом:
module.exports = { ... devServer: { proxy: 'http://localhost:8000', }, ... }
Чтобы настроить CORS в рабочей среде, вы должны добавить соответствующий прослушиватель для OPTIONS
request. Этот слушатель должен отправить ответ 200
с никем
но с Заголовками
это определит вашу желаемую политику CORS :
Access-Control-Allow-Origin: https://domain-b.com Access-Control-Allow-Methods: GET
Для получения дополнительной информации о том, как настроить CORS, проверьте https://enable-cors.org/index.html , и чтобы глубже погрузиться в ОСНОВНУЮ политику
проверьте https://livebook.manning.com/book/cors-in-action/part-1/
XSS расшифровывается как межсайтовый скриптинг, и это тип атаки с использованием инъекций. Он занимает 7-е место из 10 лучших уязвимостей, выявленных OWASP в 2017 году. Межсайтовый скриптинг – это метод, при котором злоумышленник внедряет вредоносный скрипт на доверенный веб-сайт.(раздел обновлен, спасибо Сандору) Существует 3 типа таких атак.
- Сохраненная XSS – уязвимость, исходящая от незащищенных и не обработанных пользовательских вводов, которые непосредственно сохраняются в базе данных и отображаются другим пользователям
- Отраженная уязвимость XSS, исходящая от незащищенных и не обработанных значений из URL-адресов, которые непосредственно используются на веб-страницах
- XSS на основе DOM – Аналогичен отраженному XSS, незащищенный и не очищенный значения из URL-адресов, используемых непосредственно на веб-страницах, с той разницей, что XSS на основе DOM даже не переходит на сторону сервера
Атака
1. Сохраненный XSS
Вот пример атаки. Злоумышленник заходит на ваш веб-сайт и находит незащищенное поле ввода, такое как поле комментария или поле имени пользователя, и вводит вредоносный скрипт вместо ожидаемого значения. После этого всякий раз, когда это значение должно отображаться другим пользователям, оно будет выполнять вредоносный код. Вредоносный скрипт может попытаться получить доступ к вашей учетной записи на других веб-сайтах, может быть вовлечен в DDoS-атаку или что-то подобное. Визуальное представление(источник geeksforgeeks.org ):
2. Отраженный XSS
Отраженный XSS – это атака, которая происходит, когда злоумышленник обнаруживает страницу с такой уязвимостью, например:
ожидаемый URL-адрес: https://mywebpage.com/search ?q=javascript
вредоносный URL: https://mywebpage.com/search?q =
...showing results for keyword... ...JavaScript results... ...
После обнаружения злоумышленник заманивает пользователя в ловушку, чтобы он нажал на такой вредоносный URL-адрес, и вуаля. Используются конфиденциальные данные пользователя.
Жизненный цикл атаки проиллюстрирован в примере, предоставленном geekforgeeks.com:
3. XSS на основе DOM
Этот вид атаки такой же, как отраженный, но с той разницей, что вредоносная часть URL
вообще не будет отправлена на сервер. Для приведенного выше примера:
ожидаемый URL-адрес: https://mywebpage.com/search ?q=javascript
вредоносный URL-адрес (отраженный XSS):/| https://mywebpage.com/search?q = вредоносный URL-адрес (XSS на основе DOM):
https://mywebpage.com/search#q =
Разница заключается в характере #
используется вместо ?
. Браузеры не отправляют часть URL-адреса после # на сервер таким образом, они передают его непосредственно в ваш клиентский код.
Защита
Каждое значение , которое может быть введено пользователем и используется в вашем приложении (либо на стороне сервера, либо на стороне клиента), должно рассматриваться как ненадежные данные и поэтому должны быть обработаны перед использованием ! Вы также должны выполнить проверку безопасности в своем серверном приложении и в клиентском приложении! Как показано в документации VueJS сам по себе экранирует строку перед получением значения из переменной. Более новые версии Angular также неявно экранируют строки, поэтому, если вы используете Vanilla JS, jQuery или что-то подобное, вам следует реализовать экранирование строк вручную.
Ниже перечислены три наиболее распространенных подхода к обработке ненадежных данных , и идеальный метод зависит от фактического типа поля, которое вам нужно обработать.
1. Проверка строки
Проверка – это метод, при котором пользователь определяет набор правил и запрашивает ненадежные данные для выполнения этих правил, прежде чем двигаться дальше. Этот метод хорош для числовых значений , имени пользователя , электронная почта , пароль и аналогичные поля с конкретным набором синтаксических правил.
Проверьте наличие существующих библиотек для вашего фреймворка, прежде чем рассматривать возможность написания собственных валидаторов.
2. Экранирование строки
Метод Escape полезен в тех случаях, когда вы должны разрешить пользователю использовать знаки препинания. Этот метод просматривает строку и ищет специальные символы, такие как <
>
и замените их соответствующим именем объекта HTML-символа. Вот основная функция, которую вы могли бы использовать:
function escapeText(text) { return text.replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') }
Опять же, проверьте наличие существующих библиотек, прежде чем писать свои собственные.
3. Дезинфекция струн
Строка очистки используется, когда пользователю разрешено вводить некоторые HTML-теги в своих комментариях, статьях или аналогичных. Метод очистки просматривает текст, ищет указанные вами HTML-теги и удаляет их. Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure . Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
- Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
.
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure - Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
- Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
-
-
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
Оригинал: “https://dev.to/maleta/cors-xss-and-csrf-with-examples-in-10-minutes-35k3”