【问题标题】:Is there a security hole in this method to protect Jquery/AJAX requests with PHP?这种使用 PHP 保护 Jquery/AJAX 请求的方法是否存在安全漏洞?
【发布时间】:2012-03-30 05:16:16
【问题描述】:

在我的search.php 页面上,用户可以按城市/位置搜索事物,通过 JQuery/AJAX 对名为 search_data.php 的页面进行搜索,并在 search.php 上返回结果。

现在这就是我正在做的事情: 在search.php 我有这个:

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

randomid 是一个生成 12 个随机字符的函数。这两个会话变量与 jquery $.post 请求一起作为 javascript 变量(名为“vuid”和“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 访问它。

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

【问题讨论】:

  • 客户端可以访问您使用 javascript 访问的所有内容。如果您使用 javascript 获取会话变量并传递它,那么客户端也可以。如果您正在寻找由 php 设置的会话变量,客户端可以从具有相同会话变量的页面向您的服务器发送请求。他们甚至不必知道会话变量。所有这一切都是为了防止用户使用不同域上的服务器端代码发布到您的 .php 文件。他们仍然可以通过您的域执行此操作。

标签: php ajax security access-control


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    什么样的恶意东西?我猜 search_data.php 链接到数据库?最好保护该脚本,特别是对必要的最少访问量。您可以使用仅对 search_data.php 上的表具有读取权限的数据库用户,这样可以稍微减少安全威胁。

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

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

    【讨论】:

    • 是的,它连接到数据库,但具有只读权限。我会看看这个链接,谢谢。
    • @user1093634 - 特别是查看owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet。因为您使用的是只读帐户,所以从数据库的角度来看,威胁要小得多,除非可能会查看敏感数据(如果有可能的话)。如果没有敏感数据,则潜在威胁要低得多。
    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 2021-03-05
    • 2022-01-17
    • 2015-07-24
    相关资源
    最近更新 更多