2012-07-01 3 views
0

Что касается безопасности PHP с помощью куки-файлов и сеансов, то это то, что я сделал до сих пор для предотвращения атак. Что я сделал неправильно/небезопасно?PHP-безопасность для файлов cookie и сеансов

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' и стать администратором. –

ответ

1

Часто регенерация идентификатора сеанса выполняется при изменении привилегий доступа (например, после входа в систему).

Пароль должен быть не храниться в файле cookie с клиентской стороны, даже не для хэша. Его даже не нужно хранить в сеансе, вы используете его только для подтверждения входа в систему и после записи состояния на сеанс, вы должны забыть о пароле.

Если вы хотите действительно безопасный сайт, вам необходимо подключение HTTPS с SSL-шифрованием. В противном случае злоумышленник может прослушивать информацию, отправленную открытым текстом, и использовать идентификатор сеанса (или все, что вы используете для аутентификации пользователя), чтобы олицетворять пользователя.

1

Пожалуйста, действительно, пожалуйста, не храните пароль в качестве файла cookie. Он (компьютер) может находиться в кафе или в другом месте.

Это проблема с безопасностью и одна открыта для взлома.

BTW Передумайте и используйте хитроумный ум относительно того, как человек может проникнуть в вашу систему.

+0

это пароль bcrypt; В учебнике, который я использовал, они сохраняли хешированный пароль в файле cookie для сравнения с хэшированным паролем в базе данных. Это неправильно? – user892134

+0

Да - Пароли - это односторонний контракт. Подумайте, представьте себе, что другой человек может мыслить и отменить логику - он входит в вашу учетную запись. –

+0

@EdHeal. Независимо от того, что это пароль, просто украсть чей-то сеанс cookie обычно достаточно, чтобы получить доступ. –