会话劫持或攻击?

时间:2009-09-22 23:27:35

标签: php session cookies session-hijacking

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

[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

我怀疑会话被劫持或者是一种我不知道的攻击(我是parano;))。

你知道它可能是什么吗?我该怎么做才能提高安全性并避免这种情况?

3 个答案:

答案 0 :(得分:18)

此处可能做的是此客户端已更改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文件夹中。文件变旧后,文件将被删除。

答案 1 :(得分:3)

这很可能是由垃圾邮件引起的。我看到很多spambots被发送一个会话ID作为GET参数,然后他们尝试用于SMTP注入或发送电子邮件。我会尝试在我的日志中找到证据,但我知道在至少十几个网站上发生了这种情况。当我看到它时,GET变量看起来像:?sid=v14gra@spam.com\n\subject:blah blah blah\n\nspam email here etc...

答案 2 :(得分:1)

最好的猜测是某人在其会话cookie中有一个错误的会话ID并导致错误。

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

如果要重现错误:

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