如果您的网站在共享网络上运行 服务器,请注意任何会话 变量很容易被任何人看到 同一台服务器上的其他用户。
在像GoDaddy这样的大型主机上,是否真的没有针对此的保护?这真的很容易吗?如果这很容易,我主机上其他用户的会话变量在哪里,我可以查看它们吗?
答案 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_id
(Link 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);
?>