Веб-инспектор безопасности не признает мой перебор кадров эффективным
Я запускаю приложение webinspect для обнаружения угроз безопасности в моем приложении. Одной из обнаруженных угроз была (Cross-Frame Scripting), и я исправил ее, добавив (X-Frame-Options) заголовок (SAMEORIGIN). Теперь, когда я повторно запускаю веб-инспекцию, он все еще обнаруживает (Cross-Frame Scripting), и вместе с ним сообщается следующее сообщение:
При загрузке этой страницы внутри фрейма эффективная техника удаления кадров не наблюдалась
Я использовал много блочного кода, но та же проблема сохраняется. Я попробовал следующие убийцы блоков:
Первая попытка:
<style> html{display:none;} </style>
<script>
if(self == top) {
document.documentElement.style.display = 'block';}
else {
top.location = self.location; }
</script>
Вторая попытка:
if (top != self) { top.location.replace(self.location.href); }
Третья попытка:
if(top.location!=self.locaton) {
parent.location = self.location;
}
1 ответ
Определите "эффективный".
Хотя три фрагмента JavaScript, которые вы представили, работают, вы искали способы остановить это?
Например, в iframe (который будет контролировать злоумышленник) добавьте атрибут sandbox с пустым значением:
<iframe src="Inner.html" sandbox="">
Вот пример теста, который я сделал:
Outer.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Outer Html</title>
</head>
<body>
<h1>Outer Html</h1>
<p>
Outer Html
</p>
<iframe src="Inner.html" width="400" height="300" sandbox="">
<p>Your browser does not support iframes.</p>
</iframe>
</body>
</html>
Inner.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Inner Html</title>
<script>
if (top != self) { top.location.replace(self.location.href); }
</script>
</head>
<body>
<h1>Inner Html</h1>
<p>
Inner Html
</p>
</body>
</html>
X-Frame-Options
Если вы используете X-Frame-Options
и код JavaScript, чтобы убедиться, что вы не в кадре, почему бы не установить значение DENY
вместо SAMEORIGIN
?
С SAMEORIGIN
Ваша поверхность атаки меньше, она будет успешной только в том случае, если iframe приходит с вашего сайта (возможно с другой уязвимостью). Если вы не собираетесь делать фреймы на своем сайте, вы можете использовать более безопасный вариант X-Frame-Options: DENY
,
Я думаю, что именно этого и ожидает HPE Fortify WebInspect.
Директива-фрейм-предки Content Security Policy (CSP)
Другой вариант заключается в использовании frame-ancestors
директива со значением "none" в заголовке HTTP "Content-Security-Policy". Это предотвратит (в поддерживаемых браузерах) любой домен от создания контента. Этот параметр рекомендуется, если не определена конкретная потребность в кадрировании.
Большой Ресурс
Вы можете найти больше информации о предотвращении Clickjacking в OWASP.