在我的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是学习潜在安全威胁以及如何减轻这些威胁的绝佳资源。