2012-07-01 59 views
0

關於使用cookie和會話的PHP安全性,這是我迄今爲止預防攻擊所做的工作。我做了什麼不正確/不安全?用於cookie和會話的php安全

的login.php

if ($username==$dbusername&&$hashed_password==$dbpassword){ 

setcookie('username[0]',$username,time()+(60*60*24*365)); 
setcookie('username[1]',$userid,time()+(60*60*24*365)); 
setcookie('password',$hashed_password,time()+(60*60*24*365)); 

if($admin=='1') { 
setcookie('username[3]',$admin,time()+(60*60*24*365)); 
} 
$_SESSION['logged-in']=1; 

logout.php

$time = time()-(60*60*24*365); 
setcookie('username[0]', '',$time); 
setcookie('username[1]', '',$time); 
setcookie('username[2]', '',$time); 
setcookie('username[3]', '',$time); 
setcookie('password', '',$time); 
unset($_COOKIE['username']); 
unset($_SESSION['logged-in']); 

我打電話session_regenerate_id()上everypage,是正確的阻止會話固定/劫持?

<?php session_start(); session_regenerate_id(); 

這裏是我的php.ini什麼其他的方式做我爲會議提供安全&餅乾

session.use_trans_sid = 0 
session.user_only_cookies = 1 

任何例子/ impovements歡迎,因爲我學會用例子更好。

+2

這是http://codereview.stackexchange.com的用途。 –

+0

哇。從來不知道codereview.stackexchange.com。你每天都會學到新東西,是吧? – Andrew

+0

並且不,該代碼不安全。任何人都可以添加cookie'username [3] = 1'併成爲admin。 –

回答

1

當更改訪問權限(例如登錄後)時,經常重新生成會話標識已完成。

密碼應該不存儲在客戶端的cookie,甚至不存儲哈希。甚至沒有必要將它存儲在會話中,只用它來驗證登錄,並且在將狀態寫入會話之後,應該忘記密碼。

如果你想要一個非常安全的站點,你需要一個帶有SSL加密的HTTPS連接。否則,攻擊者可以竊聽發送明文的信息,並使用session-id(或用於驗證用戶的任何內容)模擬用戶。

1

請真的請不要將密碼存儲爲cookie。它(電腦)可能在咖啡館或其他地方。

這是一個安全問題,需要打開。

順便說一句,用一個狡猾的思維來看待一個人如何進入你的系統。

+0

它是一個bcrypt密碼;在我使用的教程中,他們將散列的密碼存儲在cookie中以與數據庫中的散列密碼進行比較。那是錯的嗎? – user892134

+0

是 - 密碼是單向合同。試想一下,想象一下,其他人可以思考並改變邏輯 - 他進入了你的賬戶 –

+0

@EdHeal無論是密碼,只要竊取某人的會話cookie通常就足以獲得訪問權限。 –