Security without obscurity

Post on 14-Jun-2015

1.087 views 2 download

description

A presentation held in init Lab by baba iliica (Iliya Goranov). Topic is web security with some examples in PHP.

Transcript of Security without obscurity

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

Дискусия