security without obscurity

10
Security без Obscurity Илия Горанов

Upload: vladimir-vassilev

Post on 14-Jun-2015

1.085 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Security without obscurity

Security без Obscurity

Илия Горанов

Page 2: Security without obscurity

Често допускани грешки

• Никога не вярвайте на входни данни

На никакви входни данни! (вкл. HTTP headers)

• Не използвайте Register Globals On

• Изключете Error Reporting на Production Server-а

• Пазете се от SQL injection

• Пазете сесиите от крадене и фалшифициране

• Не използвайте .conf, .inc и подобни разширения

Page 3: Security without obscurity

Малко криптография

• Какво е хеш?

• MD5 и SHA1

• Какво е Salt?

• Какво е Brute Force?

• Какво е Rainbow Tables?

• Какво е Challenge Response?

Page 4: Security without obscurity

Аутентикация и Ауторизация

• Какво е аутентикация?

• Какво е ауторизация?

• Кога се прави аутентикация?

• Как се прави аутентикация?

• Кога се прави ауторизация?

• Как се прави ауторизация?

Page 5: Security without obscurity

Видове аутентикация

• 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

Page 6: Security without obscurity

Още малко криптография

Page 7: Security without obscurity

Малко примери?

Page 8: Security without obscurity

<?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Ауторизация

Page 9: Security without obscurity

• При аутентикацията запазваме ID на сесията в базата данни в поле предвидено за целта, в таблицата с потребителите;

• При всяко обръщение се проверява, дали ID на текущата сесия съвпада с последното записано в базата. Ако не съвпада – Log Out.

• Ако имаме екран, който не изисква reloadпродължително време, може да се постави един Java Script (с AJAX), който през определен интервал да проверява, дали текущата сесия продължава да е валидна (а и да поддържа сесията “жива”)

Пример 2Единичен Log In

Page 10: Security without obscurity

Дискусия