Рубрики
Без рубрики

CORS, XSS и CSRF с примерами за 10 минут

Эта статья должна стать вашей отправной точкой для изучения существующих стандартов веб-безопасности, наиболее распространенных веб-атак… С тегами security, web dev, javascript, java.

Эта статья должна стать для вас отправной точкой для ознакомления с существующими стандартами веб-безопасности, наиболее распространенными веб-атаками и методами их предотвращения. В конце вы также узнаете, как и почему Он был всеобщим героем. (я думаю, кроме Руперта Мердока)

Совместное использование ресурсов из разных источников, или 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 типа таких атак.

  1. Сохраненная XSS – уязвимость, исходящая от незащищенных и не обработанных пользовательских вводов, которые непосредственно сохраняются в базе данных и отображаются другим пользователям
  2. Отраженная уязвимость XSS, исходящая от незащищенных и не обработанных значений из URL-адресов, которые непосредственно используются на веб-страницах
  3. 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

  1. Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure . Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
  2. Одной из самых популярных библиотек, использующих этот подход, является |/Google Closure
  3. Одной из самых популярных библиотек, использующих этот подход, является |/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”