AJAX安全性和用户管理

时间:2011-11-03 20:41:57

标签: php ajax security

我正在开发一个Web应用程序,该应用程序将托管在“在互联网上”而非LAN上的服务器上。

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

我的问题不是要求这里的任何人写一篇关于AJAX安全性的教程,有没有人知道任何可以帮助我保护这些文件的好资源(网站,书籍等)。

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

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

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

由于

3 个答案:

答案 0 :(得分:0)

AJAX调用通常用于访问Web服务,这就是您在这里使用它们的方式。如果是这种情况,那么您需要关注的是您使用的服务器端脚本语言提供的安全层(看起来您根据问题的标签使用PHP)。

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

答案 1 :(得分:0)

这是一个很好的资源。 Securing Ajax Applications: Ensuring the Safety of the Dynamic 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应该是一个复杂的东西。

答案 2 :(得分:0)

我经常看到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标头,所以它可能是欺骗性的,所以它绝不是完全证明的。

相关问题