2015-04-03 41 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是如何實現的,但我沒有看到比教程更多的東西。

而且,如果您的服務器正在接受未加密的連接,要求您在發送密碼的地方進行身份驗證,或者來回傳遞會話令牌時,您就是在尋求麻煩。

這不能被解釋爲使用此方法的潛在安全問題的完整列表。