Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony-在每次请求后执行身份确认_Php_Security_Symfony_Session - Fatal编程技术网

Php Symfony-在每次请求后执行身份确认

Php Symfony-在每次请求后执行身份确认,php,security,symfony,session,Php,Security,Symfony,Session,我正在对Symfony上的会话劫持实施一项反措施。基本上检查用户在会话期间是否没有更改IP和/或其用户代理。基本的东西 问题是,我不知道在每次请求之后,为了运行它,我应该把代码放在哪里。基本上,更改是指在最后一次请求后更改的内容 我现在的代码是这样的 static protected function preventHijacking(Session $session) { $ipAddress = $session->get('IPaddress'); $userAgen

我正在对Symfony上的会话劫持实施一项反措施。基本上检查用户在会话期间是否没有更改IP和/或其用户代理。基本的东西

问题是,我不知道在每次请求之后,为了运行它,我应该把代码放在哪里。基本上,更改是指在最后一次请求后更改的内容

我现在的代码是这样的

static protected function preventHijacking(Session $session)
{
    $ipAddress = $session->get('IPaddress');
    $userAgent = $session->get('userAgent');

    $remoteAddress = $_SERVER['REMOTE_ADDR'];
    $httpUserAgent = $_SERVER['HTTP_USER_AGENT'];

    if(!isset($ipAddress) || !isset($userAgent)) {
        return false;
    }

    if ($ipAddress != $remoteAddress) {
        return false;
    }

    if ($userAgent != $httpUserAgent) {
        return false;
    }
    return true;
}
我的第二个问题是:

  • 你们有更好的实现方法吗

感谢您回答第一个问题:这取决于您创建会话的时间。如果会话仅用于登录用户,或者如果这是您想要保护的唯一用例,那么将此逻辑放入
AuthenticationSuccessHandler
将最有效。这涉及到扩展
DefaultAuthenticationSuccessHandler
并添加上述逻辑;然后在您的
security.yml
中,在
success\u处理程序下为此添加条目

如果您想保护所有会话,那么扩展您的会话处理程序并将此代码放入其初始化或保存方法中可能是最好的-我对Redis会话处理程序类不太熟悉,因此建议您仅此而已。一旦扩展了会话处理程序,只需将Symfony配置为使用会话处理程序及其添加的逻辑即可


至于你的第二个问题:像这样检查IP地址对于请求之间不在同一IP地址上的连接有它自己的缺点,例如,公司负载平衡他们的internet连接,不为web请求执行线程。实际上,如果您已经关闭了从URL获取会话ID的功能,这是会话劫持的主要载体,那么在我看来,这真的是杀伤力过大。我想这取决于你在保护什么以及这对它的影响。更好的做法是始终启用SSL、启用HST并保护Cookie,而忘记尝试在这一级别进行缓解。

我将从回答第二部分开始。检查IP地址并不是那么实用,因为现在我并不是完全依靠它来驱逐用户,我只是在某个地方举个旗子,因为我将来会更多地考虑这个问题。关于第一个建议,我将在本周末与这些人进行更深入的讨论,然后再与你联系。谢谢!