2. Често допускани грешки
• Никога не вярвайте на входни данни
На никакви входни данни! (вкл. HTTP headers)
• Не използвайте Register Globals On
• Изключете Error Reporting на Production Server-а
• Пазете се от SQL injection
• Пазете сесиите от крадене и фалшифициране
• Не използвайте .conf, .inc и подобни разширения
3. Малко криптография
• Какво е хеш?
• MD5 и SHA1
• Какво е Salt?
• Какво е Brute Force?
• Какво е Rainbow Tables?
• Какво е Challenge Response?
4. Аутентикация и Ауторизация
• Какво е аутентикация?
• Какво е ауторизация?
• Кога се прави аутентикация?
• Как се прави аутентикация?
• Кога се прави ауторизация?
• Как се прави ауторизация?
5. Видове аутентикация
• Basic Realm Authentication
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>
• Form based username/password authentication
• Cert authentication – SSL/HTTPS
9. Пример 2
Единичен Log In
• При аутентикацията запазваме ID на сесията в
базата данни в поле предвидено за целта, в
таблицата с потребителите;
• При всяко обръщение се проверява, дали ID на
текущата сесия съвпада с последното записано в
базата. Ако не съвпада – Log Out.
• Ако имаме екран, който не изисква reload
продължително време, може да се постави един Java
Script (с AJAX), който през определен интервал да
проверява, дали текущата сесия продължава да е
валидна (а и да поддържа сесията “жива”)