在GoDaddy上劫持会话变量有多容易(PHP)

时间:2009-01-28 14:50:10

标签: php security session-hijacking

This article表示

  

如果您的网站在共享网络上运行   服务器,请注意任何会话   变量很容易被任何人看到   同一台服务器上的其他用户。

在像GoDaddy这样的大型主机上,是否真的没有针对此的保护?这真的很容易吗?如果这很容易,我主机上其他用户的会话变量在哪里,我可以查看它们吗?

5 个答案:

答案 0 :(得分:8)

这非常简单,因为默认情况下php.ini#session.save_path指向Linux安装上的/tmp和Windows上的类似内容。这很糟糕,因为大多数用户都有/tmp的读写权限,因为他们需要它们。您可以通过将您的sesion状态存储在数据库中或通过更改您的PHP应用程序存储它的会话文件来防止这种情况,使用session_save_path

答案 1 :(得分:2)

默认情况下,会话文件存储在php.ini中session.save_path给出的位置。虽然可以为每个vhost单独定义,但httpd进程必须可以读取这些文件,因此,如果您知道该位置,则您的脚本可以从另一个vhost读取会话文件。

您可以将会话存储在数据库中(例如,using ADODb),假设服务器的其他用户无法读取您的PHP源以了解您的数据库凭据!

答案 2 :(得分:1)

如果你正在使用PHP并担心会话劫持,请查看session_regenerate_idLink to Manual)。

这不会解决其他人在此提到的session_save路径公开的问题,但它应该可以防止99.999%的劫持attmepts。

答案 3 :(得分:1)

我建议您将会话数据存储在数据库中以避免这些问题,它还有一个额外的好处,便于从用户的会话中访问实时信息。

答案 4 :(得分:0)

只要您在分片主机上,就可以使用session.save_path在您的帐户空间内设置,保存和处理访问者会话。

然后,除了您和拥有目录访问权限的主机员工之外,没有人可以访问它们。

永远不要依赖共享主机上的默认会话处理程序/位置!

<?php

        $handle = opendir(session_save_path());
        if ($handle == false)
            {
                return -1;
            }
        while (($file = readdir($handle)) !== false)
            {
                echo session_save_path() . '/' . $file .':<BR />';
                if (ereg("^sess", $file))
                    {
                        $file_array = file(session_save_path() . '/' . $file);
                        foreach ($file_array as $this_line)
                            {
                                echo $this_line."<BR />";
                            }
                echo '<BR /><BR />';

                    }
            }
        closedir($handle);

?>