CR中的R - 功能和泄露漏洞之间的界限在哪里?

时间:2009-09-30 21:08:17

标签: ajax caching url-routing crud security

我们都知道使用地址路由和HTTP-Get使用URL中的参数进行Ajax调用是多么简洁,因为客户端可以缓存这些调用,从而减少了服务器负载,但是你们在哪里认为该行介于“一种解决资源的整洁方式”和“披露漏洞”之间?我举几个例子 -

假设我在银行的网站上。在后台,我的浏览器是HTTP-Getting to / onlinebanking / AForster / transactions。当然,我对于知道我的银行帐号登录ID的人非常偏执,所以我总是确保“记住我”未经检查。但是,我的浏览器访问带有我的登录ID的URL是否构成了泄露漏洞?

如果我在论坛上,我正在阅读普通用户不应该知道的受限制的线程。我的浏览器通过HTTP-Get to / forum / Secret-Board / Im-Going-To-Kill-My-Brother /帖子检索线程的内容。我甚至用Ajax访问该URL的事实是否以某种方式向我的兄弟揭示了该线程的存在?

等等你可能会想到更多场景。我真的希望在客户端缓存我的Ajax调用,但在这些情况下,这些URL的Ajax会被视为泄露漏洞吗?

5 个答案:

答案 0 :(得分:0)

避免此类披露的最简单方法是使用ID号而不是字符串。

/forum/Board-214/Thread-5625/posts或类似事件中没有任何启示。


请注意,我并没有真正同意这个问题,只是提供了一种解决方法。

恶意用户可以在什么情况下获取AJAX请求URL而不是响应正文?

答案 1 :(得分:0)

归结为用户的浏览器,历史记录,缓存等不是秘密或受到适当保护的事实(很多情况下未经授权的用户可以访问这些内容,这是您提出问题的事实表明你可能已经意识到了它们......)。

所以,不要假设那里缓存的任何内容都会受到保护 - 并且不允许任何内容 要在那里缓存的“敏感”信息。 “什么是敏感的”,你问?好吧,任何你不想透露给任何其他用户的东西。银行帐户,秘密论坛,用户名,会话ID,交易详情 - 这些都不应该被允许缓存或存储在客户端上。

这真的是你提出的一个很好的观点,因为开发人员经常会使用AJAX来提高可用性,忘记在客户端保护信息并在客户端保持静止。

答案 2 :(得分:0)

由于URL是Web浏览器的不透明标识符,因此向其添加人类可读文本的唯一目的是简化记忆。

银行应该使用匿名ID代替您的姓名。虽然连接(希望!)加密,但URL仍将存储在浏览器的历史记录中,第三方可以访问该历史记录。

是一个匿名ID,甚至是每个会话的临时ID

论坛示例包含一个奇怪的短语,“普通用户不应该知道的受限制的线程”。普通用户是否知道线程是否存在真的很重要吗?问题是该线程的主题是在URL中公开的,这是一个漏洞。 URL应该类似于/forum/thread/12345/

老实说,这与CRUD,AJAX或您提出的任何其他流行语无关。问题在于是否可以接受明文中的秘密信息,答案是“不”。

答案 3 :(得分:0)

答案 4 :(得分:0)

精彩的对话,以及所有非常有趣的回答!对不起,我必须批量回复,但我试图快速失业,如果我在某个地方有OpenID提供商,我没有时间弄明白。

虽然我的例子已经完成,但我确实发现自己今天处于这种情况。我的项目正在逐渐脱离设计,首先要构建的是HTTP / JSON Web服务。昨天我梳理了所有UI概念,并列出了Web服务需要提供某些数据的每个要点。然后,当我试图将所有这些操作融入一致的URL方案时,我发现自己想要将一些信息放入看起来有点敏感的GET请求中。我承认我的原始帖子不是一个问题,因为它是对在此上下文中使用的RESTful Web服务(特别是CRUD端点)引发的潜在安全问题的评论。我从来没有听过任何人从这个角度谈论这个主题,我对你们所想的都很感兴趣。

我认为对我的问题最有用的答案来自John Millikin,他指出基于iframe的Ajax确实会将请求URL放入历史记录中,我很惊讶地了解到这一点。我很确定任何XHR请求都只会存在于浏览器的缓存中,其中响应也是可用的,此时您遇到了更大的问题。提到XSS攻击是另一个有趣的观点;在很多情况下,人们已经找到了一种方法来披露浏览器历史记录,或者获取某个URL的缓存。如果有人知道我的银行帐户ID是“AForster”,然后找到了从另一个域的上下文获取我的/ onlinebanking / AForster / transactions的缓存版本的方法,那么他们可以获得相当多的信息。

奇怪的是,我可能最终会谨慎行事并通过GET传递我的敏感数据,因为这些特殊的敏感数据根本不是真正的敏感数据,而且它是一个企业内部网,我们已经有了下面的TLS。对于自我记录,人类可读且易于记忆的URL,有很多要说的。但是,我知道这些请求将通过以下方式记录:1)我们的网络服务器,2)websense,以及3)我们的VPN基础设施。我曾经拥有的每个家用路由器都有可以记录URL的家长控制器,并且上帝禁止你运行一些花哨的CMS / where / everything-damn-thing-is / by-title-by /然后有人找到了获得的方法您的网络服务器的请求日志。在我的特殊情况下,这对我来说是一个可以接受的权衡,但在不同的情况下,我相信我可能有一些值得关注的理由。