2014-01-10 45 views
0

從我讀過到目前爲止無處不在......CGI :: Session和HTTP:CryptoCookie用於登錄(Perl的)

CGI ::會議(http://metacpan.org/pod/CGI::Session)似乎是使用Perl會話管理的首選方式。它有廣泛的教程可用。

HTTP :: CryptoCookie相對較少使用和已知。

我能夠通過這個簡單的代碼來設置使用CGI ::會話cookie:

#Session 
my $cgi = CGI->new; 
$CGI::DISABLE_UPLOADS = 1;   # Disable uploads 
$CGI::POST_MAX  = 512 * 1024; # limit posts to 512K max 

my $session = CGI::Session->new('driver:mysql', undef, 
    { 
     TableName=>'database', 
     IdColName=>'id', 
     DataColName=>'sessionvalue', 
     Handle=>$dbh, 
    }); 

$session->expire('+1y'); 

print $session->header();  


$session->flush(); 

我不CGI的源代碼見::會議,加密的強烈跡象,所以我有點擔心。

我讀CPAN教程,並注意這一行:

「默認情況下,CGI ::會話使用標準的CGI來解析查詢和餅乾。」

它讓我想到,我可以使用HTTP :: Cryptocookie?而不是標準的CGI,它會通過發送加密的cookies而不是標準的cookies來讓我的登錄腳本更安全?但有關HTTP :: Cryptocookie的文檔非常稀少。我也沒有在谷歌上找到任何東西。

也許有人可以幫助我嗎?

回答

0

由於CGI :: Session的工作方式,使用HTTP :: CryptoCookie沒有任何優勢。 CryptoCookie的優點在於,無法確定Cookie包含的內容而不用祕密服務器密鑰。然而,CGI :: Session cookie只包含一個會話ID,因此加密會話ID將無濟於事,因爲加密會話ID的行爲與攻擊者視角中的會話ID完全相同。

+0

但CGI :: Session默認使用MD5創建sessionID,使用相同的會話ID創建cookie並不困難。所以至少這是不安全的權利? –

+0

但是,如果您不將cookie限制爲HTTPS,並且如果您是CGI使用的信息應該通過HTTPS發送,那麼只需竊取cookie就太容易了,所以md5散列只是一個隨機數。 HTTP :: Cryptocookie不會保護你免受cookie攻擊,這是一個比打破md5更重要的問題。 – user1937198

+0

嗯,嗯...我仍然沒有得到通過使用兩個不是更好?我的意思是說,CGI:會話只使用cookie存儲會話ID。那個cookie也是可以被盜用的?但是使用HTTP :: Crypto Cookie生成的cookie,發送由CGI :: Session生成的相同的Session ID,應該是相對更好的選擇,如果它被篡改,它會返回垃圾嗎? –