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


Is there a security hole in this method to protect Jquery/AJAX requests with PHP?

在我的search.php页面上,用户可以按城市/位置搜索,通过JQuery/AAJAX搜索一个名为search_data.php的页面,结果在search.php上返回。

现在我要做的是:在search.php上,我有这个:

$_SESSION['verid'] = randomid(12);
$_SESSION['verkey'] == randomid(12);

randomid是一个生成12个随机字符的函数。这两个会话变量与jquery $.post请求一起作为javascript变量(名为"vuid"answers"vukid")发送

search_data.php上,我有这个:

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_data.php试图做恶意的事情(我认为是?),并且只允许Jquery访问它。

我的问题是,这里有什么我看不到的"洞"吗?这是保护这类网页的好方法吗?

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

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

最重要的是,恶意用户可能造成的潜在损害越多,你就越需要保护你的页面和资源。

OWASP是学习潜在安全威胁以及如何减轻这些威胁的绝佳资源。