如何保护敏感信息免受跨站点访问?

时间:2012-12-01 13:34:20

标签: cross-domain security access-control cross-domain-policy

我的网络应用程序向登录用户显示一些敏感信息。用户首先访问另一个站点而未明确注销我的站点。如果没有我或用户的接受,我如何确保其他网站无法访问敏感信息?

例如,如果我的敏感数据是JavaScript格式,则其他网站可以将其包含在脚本标记中并阅读​​副作用。我可以继续建立一个黑名单,但我不想列举什么是不安全的。我想知道什么是安全的,但我找不到任何相关的文件。

更新:在我的示例中,来自受害者网站的JavaScript在攻击者的网站上执行,而不是相反,这可能是跨站点脚本。

另一个例子是图像,其他任何网站都可以读取宽度和高度,但我不认为他们可以阅读内容,但他们可以显示它。

第三个例子是没有X-Frame-Options标题的所有内容都可以加载到iframe中,从那里可以通过欺骗用户进行拖放或复制来窃取数据。糊。

5 个答案:

答案 0 :(得分:1)

跨站点攻击的关键是确保您要显示的用户输入合法,不包含某些脚本。你可以在开始时停止它。

答案 1 :(得分:1)

  

例如,如果我的敏感数据是JavaScript格式,则另一个网站可以将其包含在脚本标记

是的!所以不要把它放在JavaScript / JSONP格式中。

传回JSON或JS代码的常见修复方法是在前面放置一些不可执行的内容,导致语法错误或挂起(for(;;);很受欢迎)。因此,将资源包含为<script>不会使攻击者无处可寻。当您从自己的站点访问它时,可以使用XMLHttpRequest获取它并在评估前删除前缀。

(不起作用的解决方法是在返回的脚本中检查window.location:当您被包含在攻击者的页面中时,他们可以控制JavaScript环境并可能破坏要执行的内置对象意想不到的事情。)

答案 2 :(得分:1)

由于我没有得到我在这里寻找的答案,我在另一个论坛上得到了答案。是这里: https://groups.google.com/forum/?fromgroups=#!topic/mozilla.dev.security/9U6HTOh-p4g

我也找到了这个回答我的问题的页面: http://code.google.com/p/browsersec/wiki/Part2#Life_outside_same-origin_rules

答案 3 :(得分:0)

首先,像superpdm状态一样,从头开始设计你的应用程序,以确保敏感信息不是首先存储在客户端,或者是恶意用户无法理解的。

此外,对于您无法控制的数据项,您可以利用内置的HTTP控件(如HttpOnly)来尝试确保客户端脚本无法访问会话等Cookie令牌等等。在您的cookie上设置httpOnly将大大有助于确保恶意的vbscripts,javascripts等不会读取或修改您的客户端令牌。

答案 4 :(得分:0)

我认为我们的网络安全知识世界仍然存在一些混乱。您害怕跨站点请求伪造,并且还在描述和寻找跨站点脚本的解决方案。

跨站点脚本是一个漏洞,允许恶意用户向您的网站注入一些不需要的内容。它可能是一些文本,但它也可能是一些JS代码或VB或Java Applet(我提到了applet,因为它们可以用来规避httpOnly标志提供的保护)。因此,如果您的知情用户点击恶意链接,他可能会窃取他的数据。它取决于呈现给用户的敏感数据量。点击链接不仅是XSS攻击的攻击媒介,如果你向用户提供其他用户提供的未经过滤的内容,有人也可能会注入一些恶意代码并造成一些损害。他不需要窃取别人的饼干来获得他想要的东西。并且在登录到您的应用程序时访问其他网站并没有任何关系。我建议:XSS

跨站点请求伪造是一个漏洞,允许某人构建经过特殊处理的表单并将其呈现给登录用户,用户在提交此表单后可能会在您的应用中执行他不打算执行的操作。操作可以是转移,密码更改或用户添加。这就是您担心的威胁,如果用户与您的应用程序保持会话并访问具有JS自动提交的表单的网站,则此类请求将获得身份验证并执行操作。并且httpOnly无法保护它,因为攻击者不需要访问存储在cookie中的sessionId。我建议:CSRF