使用PHP保护Jquery/AJAX请求的方法中是否存在安全漏洞?

使用PHP保护Jquery/AJAX请求的方法中是否存在安全漏洞?,php,ajax,security,access-control,Php,Ajax,Security,Access Control,在我的search.php页面上,用户可以按城市/地点搜索内容,通过JQuery/AJAX搜索一个名为search\u data.php的页面,搜索结果在search.php上返回 这就是我正在做的: 在search.php上,我有以下内容: $_SESSION['verid'] = randomid(12); $_SESSION['verkey'] == randomid(12); if ($_POST['vuid'] != $_SESSION['verid']) { header(

在我的
search.php
页面上,用户可以按城市/地点搜索内容,通过JQuery/AJAX搜索一个名为
search\u data.php
的页面,搜索结果在
search.php
上返回

这就是我正在做的: 在
search.php
上,我有以下内容:

$_SESSION['verid'] = randomid(12);
$_SESSION['verkey'] == randomid(12);
if ($_POST['vuid'] != $_SESSION['verid']) {
    header('Location: http://mysite.com/');
    die();
} else {
if ($_POST['vukid'] != $_SESSION['verkey']) {
    header('Location: http://mysite.com/');
    die();
} else {
//both keys correct. process Jquery data.
}
randomid
是一个生成12个随机字符的函数。这两个会话变量与jquery
$一起发送。post
请求作为javascript变量(名为“vuid”和“vukid”)

search_data.php

$_SESSION['verid'] = randomid(12);
$_SESSION['verkey'] == randomid(12);
if ($_POST['vuid'] != $_SESSION['verid']) {
    header('Location: http://mysite.com/');
    die();
} else {
if ($_POST['vukid'] != $_SESSION['verkey']) {
    header('Location: http://mysite.com/');
    die();
} else {
//both keys correct. process Jquery data.
}
使用此方法,它将阻止用户手动浏览
search\u data.php
试图进行恶意操作(我想是吧?),并且只允许Jquery访问它


我的问题是,这里有没有我看不到的“洞”?这是保护此类网页的好方法吗?

任何人都可以模拟任何HTTP请求,因此这种方法不可靠。在这种情况下,他可以伪造第一个HTTP请求来启动会话,存储PHP脚本返回的cookie,并重用它来伪造第二个HTTP请求,该请求传递cookie和他从第一个请求中获得的验证密钥。

任何人都可以模拟任何HTTP请求,因此该方法不可靠。在这种情况下,他可以伪造第一个HTTP请求来启动会话,存储PHP脚本返回的cookie,并重新使用它来伪造第二个HTTP请求,该请求传递cookie以及他从第一个请求中获得的验证密钥。

什么样的恶意行为?我猜search_data.php链接到数据库?最好能保护该脚本,尤其是以最少的访问量。您可以使用一个只对search_data.php上的表具有读取权限的数据库用户,这样可以稍微降低安全威胁

底线是恶意用户的潜在危害越大,您就越需要保护您的页面和资源


是了解潜在安全威胁以及如何缓解这些威胁的重要资源。

什么样的恶意行为?我猜search_data.php链接到数据库?最好能保护该脚本,尤其是以最少的访问量。您可以使用一个只对search_data.php上的表具有读取权限的数据库用户,这样可以稍微降低安全威胁

底线是恶意用户的潜在危害越大,您就越需要保护您的页面和资源


是了解潜在安全威胁以及如何缓解这些威胁的绝佳资源。

客户端可以访问您使用javascript访问的所有内容。如果使用javascript获取并传递会话变量,那么客户端也可以。如果您正在寻找由php设置的会话变量,那么客户端可以从具有相同会话变量的页面向服务器发送请求。他们甚至不必知道会话变量。所有这一切都是为了防止用户使用不同域上的服务器端代码发布到您的.php文件。他们仍然可以在您的域中执行此操作。客户端可以访问您使用javascript访问的所有内容。如果使用javascript获取并传递会话变量,那么客户端也可以。如果您正在寻找由php设置的会话变量,那么客户端可以从具有相同会话变量的页面向服务器发送请求。他们甚至不必知道会话变量。所有这一切都是为了防止用户使用不同域上的服务器端代码发布到您的.php文件。他们仍然可以在你的域中执行。是的,它连接到数据库,但具有只读权限。我将查看此链接,谢谢。@user1093634-请特别查看。因为您使用的是只读帐户,所以从数据库角度来看,威胁要小得多,只是可能会查看敏感数据(如果可能的话)。如果没有敏感数据,那么潜在的威胁要小得多。是的,它连接到数据库,但具有只读权限。我将查看此链接,谢谢。@user1093634-请特别查看。因为您使用的是只读帐户,所以从数据库角度来看,威胁要小得多,只是可能会查看敏感数据(如果可能的话)。如果没有敏感数据,那么潜在的威胁就要小得多。