Kilka ostatnich dni spędziłem na analizie tego, co wcześniej pisano na forum i tego, co pisano w artykułach na innych stronach.
Było kilka niejasnych pomysłów na zabezpieczenie strony stąd kilka moich pytań.
1. wielokrotnie mówiono, że dobrym zabezpieczeniem przed CSRF jest dodawanie do ważnych linków tokena - mam jednak pytanie, czy optymalnym rozwiązaniem jest, aby taki token był nadawany przy logowaniu i był on aktywny aż do czasu trwania sesji, czy za każdym razem koniecznie musi być nadawany nowy token? pytam, bo w przypadku drugiego rozwiązania będę mieć o wiele więcej pracy
2. czy koniecznie muszę filtrować nawet dane z tablicy SERVER?
przykład zapytania:
mysql_query("INSERT INTO tabela (`id`, `ip`) VALUES(NULL, '$_SERVER[REMOTE_ADDR]')");
3. znalazłem taki kod, który zabezpiecza system przed Session Fixation i Session Hijacking, jednak po jego użyciu mój system logowania nie działa poprawnie
wg mnie to największy problem, bo jeśli ktoś przejmie moją sesję, przejmę całkowitą kontrolę nad systemem i będzie mógł zrobić niemal wszystko
<?
if (!isset($_SESSION['inicjuj'])) {
$_SESSION['inicjuj'] = true;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
if($_SESSION['ip'] !== $_SERVER['REMOTE_ADDR'])
{
die('Proba przejecia sesji udaremniona!'); }
?>
4. aby zabezpieczyć się przed dodawaniem identyfikatora sesji do adresu www, należy dodać kod:
session.use_only_cookies = 1
tyle że do którego pliku i w jaki sposób?
5. to samo tyczy się poniższego kodu, który należy dodać do .htacces:
php_value session.use_only_cookies 1
php_value session.use_trans_sid 0
ale gdy go dodaje, pojawia się błąd
6. znalazłem też informację, że warto regenerować identyfikator sesji przy każdym odświeżeniu (session_regenerate_id( )

, ale rodzi to problem - co, jeśli użytkownik otworzy stronę w dwóch oknach? wtedy w jednym zostanie wylogowany
7. czy dodatkowym zabezpieczeniem może być nadanie chmodu 600 na plik config?
8. aby hasło użytkowników było bezpieczne, przy rejestracji postanowiłem skorzystać ze schematu:
HASH = md5( sól systemowa [16 znaków] + md5(hasło użytkownika) + idywidualna sól nadana dla użytkownika zapisana w bazie [16 znaków] )
czy myślę dobrze, że jest to bezpieczne, bo, nawet jeśli ktoś ukradnie nam dane, nie zna soli systemowej (zapisanej w config), a jeśli wejdzie w posiadanie systemu, nie będzie znać soli przypisanej do użytkownika
polecano mi PHPass, ale wolę to zrobić tym sposobem, jeśli uznacie to za bezpieczne
9. czy naprawdę do sesji warto dodać identyfikator użytkownika (czyli ID, np. 123), jego IP oraz przeglądarkę? kod:
<?
if(isset($_SESSION['user_id']) && $_SESSION['user_agent'] == $_SERVER['HTTP_USER_AGENT'] && $_SESSION['user_ip'] == $_SERVER['REMOTE_ADDR']){ }
else{
}
?>
10. czy przy autologowaniu do ciastka powinienem dodać ID użytkownika oraz HASH, o którym mowa w punkcie 8? czy to aby na pewno bezpieczne?