2015-04-03 60 views
0

一旦密码匹配的Apache我的登录脚本做打印这个厨子:每隔脚本的Perl CGI ::会话cookie

my $session = new CGI::Session(); 
$session->param("~user", $user_name); 
my $cookie = CGI::Cookie->new(-name=>$session->name, -value=>$session->id, -domain=>''); 
print $session->header(-cookie=>$cookie, @_); 

然后,检查会话未过期或空我做给后访问和我检查登录用户名使用此代码:

my $session = CGI::Session->load(); 
$loggd_user = $session->param("~user"); 

然后$ loggd_user访问所有有关他的用户名的数据。但是如果将厨师改为另一个用户名会发生什么情况?可能吗?会有人访问别人的数据吗?此代码的任何其他安全问题还是可以的?

回答

0

有在后端的安全性,可以在回答其中一些问题的解释: https://metacpan.org/pod/CGI::Session::Tutorial#SECURITY

唯一来回传递与CGI :: Session是会话ID。有关会话的所有信息都保存在服务器上(无论您选择哪个地方 - 请将其放置在Web服务器无法使用的地方!)。该数据的安全性取决于服务器的配置方式,您使用CGI :: Session时使用的选项等。

您不清楚您是否正在验证IP。如果你不是,并且任何人获得有效会话的会话ID,他们可以劫持它并假装成为那个人。伪造cookie只是微不足道的,因为它们只是可以明确设置的标题字段。困难在于在cookie中伪造一个有效的会话ID。

由于您正在使用cookies进行会话,因此浏览器会持续跟踪客户端,并在您每次访问该页面时将其重新发送到服务器。如果您没有第二种方法来识别客户,那么这会为跨站点请求伪造打开大门。即使检查IP也不能阻止CSRF。

您应该在某些时候过期这些cookie,我不只是在服务器端。该cookie应该有一个到期日期,以便客户端删除它关于会话的cookie,以便它将停止发送它。我不确定CGI :: Session是如何实现的,但我没有看到比教程更多的东西。

而且,如果您的服务器正在接受未加密的连接,要求您在发送密码的地方进行身份验证,或者来回传递会话令牌时,您就是在寻求麻烦。

这不能被解释为使用此方法的潜在安全问题的完整列表。