【问题标题】:PHP Checking User Agent and IP To Prevent Session HijackingPHP 检查用户代理和 IP 以防止会话劫持
【发布时间】:2012-06-03 23:33:09
【问题描述】:

我正试图弄清楚如何防止会话劫持。这是我想做的事情:

除了用户 ID 会话,还添加一个用户代理和用户 IP 会话。每次加载页面时,都会检查这些会话以查看它们是否匹配 - 这是否足够?例如:

<?php

$userIp = $_SESSION['userIp'];
$userAgent = $_SESSION['userAgent'];

if ($userIp != $_SERVER['REMOTE_ADDR'] || $userAgent != $_SERVER['HTTP_USER_AGENT'] {
    session_destroy();
}

?>

谢谢。

【问题讨论】:

    标签: php security session session-hijacking


    【解决方案1】:

    我同意 z42

    我也想建议一种方法,每次用户成功登录到您的网站 您可以生成一个 SALT 并将其存储在会话和数据库中,并设置条件 检查用户是否已经登录,这样你就不能阻止多个用户使用同一个帐户多次登录,并在用户注销时从数据库中销毁 SALT。

    【讨论】:

    • 感谢您的建议,非常有帮助!我一定会使用这种技术。
    【解决方案2】:

    比这复杂得多。您的站点/服务将被具有不同设置的各种人访问。可能出错的第一件事是有人正在通过代理服务器。您的应用将看到的 IP 可能会发生变化,并且会话对于有效用户来说将达到平衡。

    如果您绝对需要对 IP 做某事,那么在不出现太多误报的情况下,您最多只能检查原始国家/地区。如果您检测到一个来自加拿大的登录和另一个来自印度的登录,则可能存在问题。即便如此,它也不是万无一失的。

    用户代理也太容易伪造了:如果我能得到某人的PHPSESSIONID,那么我肯定也能得到他们的用户代理。所以这里没有做太多事情。

    保护某人会话的最佳方法是将所有经过身份验证的内容置于 HTTPS 之后,并确保会话 cookie 仅支持 HTTPS。

    编辑:如果您在会话后面保护的数据非常敏感,并且您的用户需要注意这一点,您可以随时向他们展示其他会话为他们的用户登录。例如,GMail 也是如此。

    【讨论】:

    • 感谢您的回答。老实说,我对第一点并不太在意,但你的第二点是有效的。如果我无法找到防止这种情况的方法,我将使用 HTTPS。
    • 谢谢!顺便说一句,无论您决定使用什么选项,我总是建议在顶部添加 HTTPS。公共 WiFi 热点的激增意味着任何不使用 HTTPS 的东西都几乎对所有人开放。
    • 由于你只想使用http,如果用户不使用vpn,你的用户名和密码已经可以被黑客获取。甚至不需要考虑会话。
    猜你喜欢
    • 2012-02-20
    • 2012-08-27
    • 1970-01-01
    • 2012-05-19
    • 2017-12-22
    • 2010-11-28
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多