Javascript 如何打破内容安全策略?
内容安全策略看起来非常健壮,但我认为它并不完美(我也看到有消息称它是XSS的“部分”预防)。我的问题是:它不能阻止什么类型的XSS攻击?没有,所有浏览器都实现了它,因此使用不受支持的浏览器的用户它不提供保护 即使是在受支持的浏览器上,除非内容安全策略是禁用所有JavaScript(内联、内部/外部域),否则它仍然会保留可以运行JavaScript的区域。这意味着,如果任何恶意JavaScript可以进入这些区域,那么内容安全策略将不会阻止XSS的发生 CSP不停止XSS的一些示例:Javascript 如何打破内容安全策略?,javascript,html,security,http-headers,content-security-policy,Javascript,Html,Security,Http Headers,Content Security Policy,内容安全策略看起来非常健壮,但我认为它并不完美(我也看到有消息称它是XSS的“部分”预防)。我的问题是:它不能阻止什么类型的XSS攻击?没有,所有浏览器都实现了它,因此使用不受支持的浏览器的用户它不提供保护 即使是在受支持的浏览器上,除非内容安全策略是禁用所有JavaScript(内联、内部/外部域),否则它仍然会保留可以运行JavaScript的区域。这意味着,如果任何恶意JavaScript可以进入这些区域,那么内容安全策略将不会阻止XSS的发生 CSP不停止XSS的一些示例: 如果应用
- 如果应用程序正在使用内联(在页面上)JavaScript,并且CSP策略允许它。如果未编码/未验证/恶意值被放入页面,那么浏览器将运行恶意JavaScript,就像它将运行预期的JavaScript一样。(目前ASP.Net Web表单应用程序需要在页面上运行JavaScript,因此显示的任何恶意输入都将由浏览器执行
- 如果您正在为应用程序动态创建JS文件,并且在该文件中插入了未编码/未验证/恶意值,则会导致XSS漏洞
- 如果您通过http而不是https发送页面和/或JavaScript文件,则MITM攻击可以通过网络修改值
- 如果您正在从第三方域加载JavaScript文件,并且这些文件的安全性受到威胁,则可能会将恶意脚本发送到您的应用程序,而不是最初预期的脚本(想想CDN)
简而言之,CSP是一个非常好的防御层,但它不应该是你唯一的防线。尽管它不会覆盖所有内容,也不是所有当前支持它的浏览器,但它是一个额外的安全层,我可以用来确保我的应用程序和用户的安全。没有所有浏览器都实现了它,因此使用不受支持的浏览器的用户呃,它不提供保护 即使是在受支持的浏览器上,除非内容安全策略是禁用所有JavaScript(内联、内域/外域),否则它仍然会保留可以运行JavaScript的区域。这意味着,如果任何恶意JavaScript可以进入这些区域,则内容安全策略将不会阻止XSS的发生 CSP不停止XSS的一些示例:
- 如果应用程序正在使用内联(页面上)JavaScript,且CSP策略允许。如果未编码/未验证/恶意值被放入页面,则浏览器将运行恶意JavaScript,就像运行预期的JavaScript一样。(目前ASP.Net Web表单应用程序需要在页面上运行JavaScript,因此显示的任何恶意输入都将由浏览器执行
- 如果您正在为应用程序动态创建JS文件,并且在该文件中插入了未编码/未验证/恶意值,则会导致XSS漏洞
- 如果您通过http而不是https发送页面和/或JavaScript文件,则MITM攻击可以通过网络修改值
- 如果您正在从第三方域加载JavaScript文件,并且这些文件的安全性受到威胁,则可能会将恶意脚本发送到您的应用程序,而不是最初预期的脚本(想想CDN)
简言之,CSP是一个非常好的防御层,但它不应该是您唯一的防线。尽管它不会覆盖所有内容,也不是所有当前支持它的浏览器,但它是一个额外的安全层,我可以用来确保我的应用程序和用户的安全。您能更具体地说明一下吗“如果任何恶意的JS可以进入这些区域”?怎么会发生这种情况?假设您不允许内联脚本或eval,CDN(例如托管jquery)妥协就是一个例子。子资源完整性有助于缓解这种威胁。答案很好。我同意-我倾向于将CSP视为一个安全网。XSS的真正防御措施是正确的输出编码,然而,如果编码例程中遗漏了一个输出,那么健壮的CSP可以节省您的时间,让您有机会在它被利用之前修复它。只有一个问题-您能否详细说明CSP Level 2指令是什么以及它们将如何降低风险?您能否更具体地说明“是否有任何恶意JS可以进入这些区域”?这可能是如何发生的?假设您不允许内联脚本或eval,CDN(例如托管jquery)妥协就是一个例子。子资源完整性有助于缓解这种威胁。答案很好。我同意-我倾向于将CSP视为一个安全网。XSS的真正防御措施是正确的输出编码,然而,如果编码例程中遗漏了一个输出,那么健壮的CSP可以节省您的时间,让您有机会在它被利用之前修复它。只有一个问题-您能否详细说明CSP 2级指令是什么,以及它们将如何降低风险?