代码之家  ›  专栏  ›  技术社区  ›  Toto

会话劫持还是攻击?

  •  8
  • Toto  · 技术社区  · 15 年前

    最近我在错误日志中看到了这一点(每天1个,每天有40000个访问者):

    [22-Sep-2009 21:13:52] PHP Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /var/my_files/class.session.php on line 67 
    [22-Sep-2009 21:13:52] PHP Warning: Unknown: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in Unknown on line 0 
    [22-Sep-2009 21:13:52] PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0
    

    这不是配置问题,因为它适用于所有人。

    我已经将php.ini修改为:

    session.use_only_cookies = 1
    session.use_trans_sid = 0
    

    我怀疑一个会话被劫持或一种我不知道的攻击(我是帕拉诺)。

    你知道会是什么吗?我能做些什么来提高安全性并避免这种情况发生?

    3 回复  |  直到 15 年前
        1
  •  18
  •   mauris    15 年前

    这里可能要做的是,这个客户机更改了phpsessid cookie的内容。通常sessionid类似于“62bf75fb02922cf9c83fb3521255b4ab”(十六进制)

    但是,用户可能已经使用一些工具修改了cookie。这不会对您的网站和服务器造成损害,因为此修改是在客户端进行的,这样做不会影响服务器(除了生成这些错误)。您可以做的是,当您收到此类错误时,更改会话ID并替换客户机上的会话ID。

    见解决方案:

    $ok = @session_start();
    if(!$ok){
      session_regenerate_id(true); // replace the Session ID
      session_start(); // restart the session (since previous start failed)
    }
    

    记住,不能通过php会话cookie将文件替换或写入服务器。只有当一个会话成功启动时,PHP才会写一个关于当前会话的会话文件,并将其存储到tmp文件夹中。一旦文件变旧,文件就会被删除。

        2
  •  3
  •   Josh Andreas Rehm    15 年前

    这很可能是由Spambot引起的。我看到很多spambot被发送一个会话ID作为get参数,然后它们尝试将其用于SMTP注入或发送电子邮件。我会设法从我的日志中找到证据,但我知道至少在十几个网站上发生过。当我看到它时,get vars看起来像: ?sid=v14gra@spam.com\n\subject:blah blah blah\n\nspam email here etc...

        3
  •  1
  •   MitMaro    15 年前

    最好的猜测是,有人的会话cookie中的会话ID不正确,导致了错误。

    我看不到有人会如何使用无效的会话ID进行会话劫持。

    如果要复制错误:

    <?php
    error_reporting(E_ALL);
    session_start();
    session_id ("$");