View
1.085
Download
2
Category
Preview:
DESCRIPTION
A presentation held in init Lab by baba iliica (Iliya Goranov). Topic is web security with some examples in PHP.
Citation preview
Security без Obscurity
Илия Горанов
Често допускани грешки
• Никога не вярвайте на входни данни
На никакви входни данни! (вкл. HTTP headers)
• Не използвайте Register Globals On
• Изключете Error Reporting на Production Server-а
• Пазете се от SQL injection
• Пазете сесиите от крадене и фалшифициране
• Не използвайте .conf, .inc и подобни разширения
Малко криптография
• Какво е хеш?
• MD5 и SHA1
• Какво е Salt?
• Какво е Brute Force?
• Какво е Rainbow Tables?
• Какво е Challenge Response?
Аутентикация и Ауторизация
• Какво е аутентикация?
• Какво е ауторизация?
• Кога се прави аутентикация?
• Как се прави аутентикация?
• Кога се прави ауторизация?
• Как се прави ауторизация?
Видове аутентикация
• 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
Още малко криптография
Малко примери?
<?php$modules = array(
1 => 'Модул първи',2 => 'Модул втори',4 => 'Модул трети',8 => 'Модул четвърти',16 => 'Модул пети',32 => 'Модул шести'
);echo '<form method="post">'."\n";foreach ($modules as $k => $v) {
echo '<input type="checkbox" name="auth[]" value="'.$k.'" /> '.$v."<br />\n";}echo '<input type="submit" /></form>';
$auth = (is_array($_POST['auth'])) ? array_sum($_POST['auth']) : 0;
echo 'Има достъп до:<br />';
foreach ($modules as $k => $v) {if ($auth & $k) {
echo $v . '<br />';}
}
?>
Пример 1Ауторизация
• При аутентикацията запазваме ID на сесията в базата данни в поле предвидено за целта, в таблицата с потребителите;
• При всяко обръщение се проверява, дали ID на текущата сесия съвпада с последното записано в базата. Ако не съвпада – Log Out.
• Ако имаме екран, който не изисква reloadпродължително време, може да се постави един Java Script (с AJAX), който през определен интервал да проверява, дали текущата сесия продължава да е валидна (а и да поддържа сесията “жива”)
Пример 2Единичен Log In
Дискусия
Recommended