AJAX安全性和用户管理


AJAX security and user managment

我正在开发一个web应用程序,该应用程序将托管在"在互联网上"的服务器上,而不是局域网。

该应用程序使用了相当多的AJAX调用,并为这些函数提供了大约12个AJAX处理程序文件。

我的问题是,而不是要求任何人在这里写一个教程的AJAX安全,有人知道任何好的资源(网站,书籍,无论什么),可以帮助我保护这些文件。

现在,只要你知道它正在寻找的变量名,你就可以自由地从数据库中获取数据。

我在想可能是会话验证,或者是登录用户的那些行。

无论如何,如果你有什么好的资源,我会自己做作业。

谢谢

AJAX调用通常用于访问web服务,这似乎就是您在这里使用它们的目的。如果是这样的话,那么你需要关心的是你在服务器端脚本语言中提供的安全层,你正在使用(看起来你正在使用PHP根据你的问题的标签)。

您可以对站点上不通过AJAX调用访问的其他页面进行身份验证和保护,您可以为您的web服务实现相同的方式。例如,如果您需要对应用程序进行身份验证,那么您可以将用户ID存储在$_SESSION中。从那里,你可以检查,以确保用户登录通过$_SESSION每当你的一个web服务被请求。

我经常看到AJAX调用检查X-REQUESTED-WITH HTTP头以"验证"请求来自AJAX。根据您发送AJAX调用的方式(使用XmlHttpRequest或JS库),您可以使用该头的标准值,也可以将其设置为自定义值。这样,您就可以在PHP中执行类似的操作来检查页面是否通过AJAX请求:

http://davidwalsh.name/detect-ajax

if( !empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
    strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 

重要的是要注意,因为它是一个HTTP头,它可以被欺骗,所以它绝不是完全可靠的。

这是一个很好的资源。保护Ajax应用程序:确保动态Web的安全

然而,一个非常简单的方法是使用带有私钥的MD5哈希。例如USER_NAME + PRIVATE_KEY。如果您知道网站/登录上的用户名,您可以将该密钥在MD5散列中提供给javascript变量。然后,只需在AJAX请求中传递用户名,REST服务就可以使用相同的私钥加上用户名,并比较两个散列。您只需发送一个散列,然后发送用户名。它简单而有效。实际上也不可能逆转,除非你有一个简单的私钥。

在你的javascript中你可以这样设置:

var user='username';
var hash='925c35bae29a5d18124ead6fd0771756'

然后,当你发送请求时,你发送这样的内容:

myService.php?user=username&hash=925c35bae29a5d18124ead6fd0771756&morerequests=goodthings

当您检查它时,在服务中您将执行如下操作

<?php
if(md5($_REQUEST['user']."_privatekey")==$_REQUEST['hash']){
echo 'passed validation';
}else{
echo 'sorry charlie';
}?>

显然,您需要使用PHP或其他东西来生成带有私钥的哈希,但我认为您已经了解了总体思路。_privatekey应该是一些复杂的东西,以防你确实有一个巨魔试图破解它。