在我们的网站上,来自广告Provider 的外部脚本(所有Java脚本)偶尔会将用户导航到一些恶意软件站点.

任何JS代码都可以从广告Provider 加载(例如,有时它会创建一个iframe来显示广告,有时广告会直接显示在主页面中).

我想知道如何安全地执行prevent any external script from triggering top level navigation,脚本是否从IFRAME中执行.

目前的解决方案是在每个响应中添加CSP sandbox个头:

header( 'Content-Security-Policy: sandbox allow-downloads allow-forms allow-modals allow-pointer-lock allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation allow-top-navigation-to-custom-protocols;' );

该策略是为了防止顶级导航by omitting the 100 header.

为了防止顶级导航,这是一个足够的解决方案吗?有没有更好的方法来实现这一点?

推荐答案

这是不够的,因为在您的情况下,您还需要在顶层运行第三方脚本.省略allow-top-navigation只会阻止iframe更改页面的URL(顶部).例如:

<a target="_top" href="https://example.com">foo</a>
open('https://example.com', '_top')

How to protect against it?

你需要一个已知良好的第三方资源版本,并给它们加载一个nonce.这将确保其他版本不会在您的页面中运行.

Javascript相关问答推荐

JS生成具有给定数字和幻灯片计数的数组子集

如何在表格上拥有水平滚动条,在正文页面上拥有垂直滚动条,同时还对html表格的标题使用位置粘性?

通过在页面上滚动来移动滚动条

浮动Div的淡出模糊效果

colored颜色 检测JS,平均图像 colored颜色 检测JS

在grafana情节,避免冲突的情节和传说

如何在输入元素中附加一个属性为checkbox?

使用GraphQL查询Uniswap的ETH价格

如何修复我的数据表,以使stateSave正常工作?

在运行时使用Next JS App Router在服务器组件中运行自定义函数

为什么我的自定义元素没有被垃圾回收?

不协调嵌入图片

如何向内部有文本输入字段的HTML表添加行?

需要刷新以查看Mern堆栈应用程序中的更改

将字符串解释为数字;将其重新编码为另一个基数

不允许在对象文本中注释掉的属性

通过ng-绑定-html使用插入的HTML中的函数

MUI-TABLE:MUI表组件中交替行的不同 colored颜色 不起作用

:host::ng-Deep不将样式应用于material 复选框

对象作为react 子对象无效(已找到:具有键的对象{type,props}).如果要呈现一个子级集合,请改用数组