В то время как использование CSP для немного другой цели (песочница), я понял, что очень простая ссылка с автоматическим щелчком, похоже, обходит даже относительно строгую CSP. Я описываю следующее:
Политика безопасности содержимого:
default-src 'none'; script-src 'unsafe-inline';
И тело:
<a href="#" onclick="location.href='http://www.google.com'; return false;">test</a>
<script>
document.querySelector("a").click();
</script>
Очевидно, что в реальной атаке вы сначала включаете информацию о файлах cookie в поле href
и, возможно, переносите это в скрытый self-embedding iframe или переадресовываете домен обратно туда, откуда вы пришли (потенциально с дополнительными параметрами URL-адреса таким образом создавая своего рода XMLHttpRequest, минуя connect-src
), но этот базовый пример показывает проблему.
Есть ли способ предотвратить это с помощью CSP (который все еще разрешает выполнение Javascript)?
Подобные атаки
То же самое можно сделать и с некоторыми другими методами навигации. Причина, по которой я конкретно задавала этот метод, на самом деле имеет больше возможностей для моих второстепенных целей, чем при использовании XSS. В любом случае, открыты для любых реальных решений.
Непосредственное объяснение стороны
Из-за всей путаницы, как это может быть применимо даже без script-src: 'unsafe-inline'
. Представьте следующий файл с именем api.ext
print URLParameters.method
[...]
Затем этот файл можно вызвать как api.ext?method=<script src='api.ext?method=alert("test")//'></script><!--
(за исключением того, что вам потребуется дополнительная кодировка URL и прочее, это просто для того, чтобы получить точку). Найти подобные действия сложно, и они довольно редки, но такие вещи, как connect-src
, похоже, существуют, чтобы предотвратить утечку информации даже в этих случаях.