AJAX安全问题

4

我希望能够解决一些我对AJAX安全性的疑问。以下是一个我正在努力理解的场景。

假设我正在使用AJAX请求某些半敏感的内容到页面上。例如,我将向php文件传递用户的ID并返回一些关于他们自己的信息。那么,有什么东西可以阻止其他人模拟这个Javascript请求,并将不同的ID传递给PHP脚本呢?

  • 服务器是否有任何措施来防止这种情况发生?
  • DOM是否识别最初放置或由服务器编写的JavaScript,与客户端JavaScript有所区别?
  • 在使用AJAX请求敏感材料时会存在哪些更多的安全问题?
  • 我正在使用suPHP,这会对这种情况产生任何影响吗?

我非常确定AJAX无法跨域访问一个PHP文件。 - Phil
你可以通过编写 PHP 脚本来解决这个问题,该脚本执行跨域操作并将其提供给 AJAX。 - Im0rtality
这就是我在这里阅读的内容吗?http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest - grep
2个回答

10

一个Ajax调用与您发起的任何其他HTTP请求完全相同,唯一不同的是它是异步的(不会重新加载Web浏览器)。因此,您应该使用您当前网站上使用的任何身份验证方式。

这可能是Windows集成安全性、cookie等。基本上,您的PHP脚本只需验证请求是否来自您应用程序的有效用户即可。


如果它是应用程序的有效用户,但他们试图伪造请求来获取另一个用户的信息怎么办?此时,会话检查似乎毫无意义,因为这是一个有效的用户,试图利用该应用程序。 - grep
如果他们试图访问另一个用户的数据,请只给他们拒绝访问的权限。您的脚本应该知道是哪个用户在发出请求(这是身份验证),以及他们正在请求什么信息。 - tskuzzy

2

AJAX本质上是不可安全的。您无法同时使资源可供远程使用并保持完全安全。没有100%可靠的方法来确定请求是来自客户端JavaScript还是伪造的。

最多,您可以使其更难/更繁琐地进行伪造。


那么如果请求只能在用户登录后发生,我是否应该在输出任何AJAX请求的PHP文件之前进行SESSION检查?如果是这样,就终止脚本吗? - grep
"没有一种100%可靠的方法来确定请求是来自客户端JavaScript还是伪造的请求。" - 当然有。浏览器将发送所有cookie与Ajax请求一起发送,而在PHP端,您可以访问用户的$ _SESSION,因此您需要像在任何其他页面上一样进行正常身份验证。 - AndrewR
@andrewr:没有什么能阻止用户伪造自己的请求,或者他们的会话令牌被盗,或者通过CSRF触发Ajax请求。 - Marc B
如果你知道 cookie 字符串是什么,你可以将其与伪造的请求一起发送。Cookie 只是一个特别格式化的请求头。 - Nick Husher
2
@Marc B:AJAX 的安全性与 HTTP 相同。您可以对 HTTP 请求应用的任何安全措施,同样适用于 AJAX 请求。有一些基于 HTTP 的 Web 应用程序被广泛认为是安全的,因此您可以构建一个同样被广泛认为是安全的 AJAX 应用程序。 - Nick Husher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接