Browser 如何在服务器上检测浏览器是否支持CSP?

Browser 如何在服务器上检测浏览器是否支持CSP?,browser,server,content-security-policy,Browser,Server,Content Security Policy,我有一个服务器helper.com,它通过定制CSP响应GET请求,例如: 内容安全策略:默认src'self';框架祖先https://my.com; 想法是只有my.com可以包含helper.com中的小部件 这在现代浏览器(Chrome、Safari、Firefox)中运行良好 问题是,如何可靠地排除不支持CSP的浏览器 这就是IE家族的全部(?),优秀浏览器的非常旧的版本,传统浏览器,即使有人碰巧使用它 技术原因是,如果用户在helper.com上有一个会话cookie,我计划提供用户

我有一个服务器
helper.com
,它通过定制CSP响应
GET
请求,例如:

内容安全策略:默认src'self';框架祖先https://my.com;

想法是只有
my.com
可以包含
helper.com
中的小部件

这在现代浏览器(Chrome、Safari、Firefox)中运行良好

问题是,如何可靠地排除不支持CSP的浏览器

这就是IE家族的全部(?),优秀浏览器的非常旧的版本,传统浏览器,即使有人碰巧使用它

技术原因是,如果用户在
helper.com
上有一个会话cookie,我计划提供用户的机密信息,我担心有人使用IE登录,一些黑客会创建
hacker.com
,试图通过ajax或脚本标记或字体资源或图像从
helper.com
获取内容,并窃取用户的机密数据


在排序中,如果我为CSP服务,我希望确保它将由浏览器应用。

我将执行以下步骤:

  • 通常浏览器在请求头上发送
    用户代理
    。并且无法从客户端代码更改浏览器发送的
    用户代理
    头。所以,我会在web服务器端使用该值来决定我要处理的浏览器。参考:
  • 那么根据我的情况,我就知道我是否应该允许/不允许这个浏览器了。当然,我确切地知道我的网站需要哪些CSP头支持
  • 对于不允许使用的浏览器,我会使用
    不支持的浏览器.html
    ,或者对于其他浏览器,我会更进一步
  • 我也会在我的
    index.html
    或其他html页面中添加一些琐碎的JS代码,以便在该浏览器不支持我的站点所需的确切CSP标题时不发出请求
  • 此外,我会在我的http响应中添加与旧浏览器兼容的标题,如
    X-Frame-Options“SAMEORIGIN”
    ,如果浏览器不遵守/理解CSP标题,这将用于我们的特定用途

  • 这不是CSP真正做的。CSP不保护网站免受恶意用户的攻击;它可以保护用户免受受损网站的攻击。您的最佳选择是某种形式的服务器身份验证,以确定您是否提供了数据。但这不是CSP的问题

    请帮我澄清这个问题。。。用户被认为是一个好演员。坏演员会试图将我的内容嵌入第三方网站,以欺骗用户。因此,我希望依靠CSP来保护用户。。。这有意义吗?如果黑客正在创建一个欺骗网站,如果你的数据是公开的,他们可以有效地向你的数据发出浏览器请求并显示它。正如我之前所说的,实现您想要的唯一方法是限制对进行身份验证的用户的访问,即:登录的用户。这与CSP无关用户通过cookie登录:)没有cookie的浏览器一无所获,没有公共数据。我正在尝试保护登录用户的数据:)用户可以轻松更改其用户代理,这将有效地使整个响应无效。记住金科玉律:永远不要相信用户输入让我们假设善意的用户:)最初的问题是区分现代用户(好的浏览器,可以信任它来实施CSP)和传统用户(旧浏览器,不希望安全)。这两个用户类都允许登录,但在早期版本中,应该允许使用新的跨站点功能。