限制对通常通过AJAX访问的远程PHP页面的伪造访问

限制对通常通过AJAX访问的远程PHP页面的伪造访问,php,ajax,drupal,Php,Ajax,Drupal,我正在建立一个Drupal站点,它有一个小小的投票系统。我有一个PHP页面,它接收参数并相应地更新投票数据库。如何允许通过Drupal站点上的此AJAX访问此页面,但仅限于访问此URL的外部用户,以防止伪造投票?AJAX==常规HTTP请求。您无法区分AJAX请求和“正常访问”。这是无法避免的 为了防止错误的投票,你需要在你的投票系统中建立这样的安全机制。要求注册、使用会话和nonce或任何必要的东西。但是尝试“阻止非AJAX请求”并不是一个解决方案。您可以依赖大多数标准浏览器附加到每个AJAX

我正在建立一个Drupal站点,它有一个小小的投票系统。我有一个PHP页面,它接收参数并相应地更新投票数据库。如何允许通过Drupal站点上的此AJAX访问此页面,但仅限于访问此URL的外部用户,以防止伪造投票?

AJAX==常规HTTP请求。您无法区分AJAX请求和“正常访问”。这是无法避免的


为了防止错误的投票,你需要在你的投票系统中建立这样的安全机制。要求注册、使用会话和nonce或任何必要的东西。但是尝试“阻止非AJAX请求”并不是一个解决方案。

您可以依赖大多数标准浏览器附加到每个AJAX请求的
'X-request-With:XMLHttpRequest'
HTTP头

然而,正如@deceze所指出的,它远没有被认为是“安全的”。通过使用Fiddler或编程方式,发出包含此标头的“普通”http请求非常容易


如果您只需要通过简单刷新浏览器地址栏来限制投票,只需更改脚本以使用http
POST
verb获取投票值。

我明白了。每个请求都会删除该用户id下以前的所有投票,因此每个用户id只能有一个投票。现在我只需要确认服务器端,给定的用户id与当前登录的Drupal用户匹配。但是,我在获取这个外部PHP脚本的信息时遇到了问题。似乎我只能在实际的Drupal页面中访问这些变量。为什么不将投票系统移动到Drupal?这就是我正在尝试的。我会告诉你进展如何的。很好,谢谢!我认为现在一切都很安全。