SlideShare une entreprise Scribd logo
1  sur  10
Télécharger pour lire hors ligne
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
Още малко криптография
Малко примери?
Пример 1
                                                      Ауторизация
<?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 />';
      }
}

?>
Пример 2
                  Единичен Log In
• При аутентикацията запазваме ID на сесията в
  базата данни в поле предвидено за целта, в
  таблицата с потребителите;

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

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

Contenu connexe

Similaire à Security without obscurity

Сигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Сигурност и права за достъп в уеб приложения изработени с работната рамка YiiСигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Сигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Ilko Kacharov
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BG
svilen.ivanov
 
ИнтеRESTни уеб услуги
ИнтеRESTни уеб услугиИнтеRESTни уеб услуги
ИнтеRESTни уеб услуги
svilen.ivanov
 

Similaire à Security without obscurity (7)

B3 t3 cookies
B3 t3 cookiesB3 t3 cookies
B3 t3 cookies
 
PHP Security
PHP SecurityPHP Security
PHP Security
 
Сигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Сигурност и права за достъп в уеб приложения изработени с работната рамка YiiСигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Сигурност и права за достъп в уеб приложения изработени с работната рамка Yii
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BG
 
Drupal security lecture
Drupal security lectureDrupal security lecture
Drupal security lecture
 
ИнтеRESTни уеб услуги
ИнтеRESTни уеб услугиИнтеRESTни уеб услуги
ИнтеRESTни уеб услуги
 
Drupal Security
Drupal SecurityDrupal Security
Drupal Security
 

Plus de Vladimir Vassilev

Хакерспейсовете на Балканите и в България
Хакерспейсовете на Балканите и в БългарияХакерспейсовете на Балканите и в България
Хакерспейсовете на Балканите и в България
Vladimir Vassilev
 
WordPress основи в сигурността
WordPress основи в сигурносттаWordPress основи в сигурността
WordPress основи в сигурността
Vladimir Vassilev
 
WordPress - working with themes
WordPress - working with themesWordPress - working with themes
WordPress - working with themes
Vladimir Vassilev
 
Пари, енергия и растеж като нает, наемащ или самонает
Пари, енергия и растеж като нает, наемащ или самонаетПари, енергия и растеж като нает, наемащ или самонает
Пари, енергия и растеж като нает, наемащ или самонает
Vladimir Vassilev
 
Въведение в WordPress
Въведение в WordPressВъведение в WordPress
Въведение в WordPress
Vladimir Vassilev
 
Курс по Drupal - Лекция 1
Курс по Drupal - Лекция 1Курс по Drupal - Лекция 1
Курс по Drupal - Лекция 1
Vladimir Vassilev
 
Google: Summer of Code 2010 (SIP-Communicator)
Google: Summer of Code 2010 (SIP-Communicator)Google: Summer of Code 2010 (SIP-Communicator)
Google: Summer of Code 2010 (SIP-Communicator)
Vladimir Vassilev
 

Plus de Vladimir Vassilev (20)

Хакерспейсовете на Балканите и в България
Хакерспейсовете на Балканите и в БългарияХакерспейсовете на Балканите и в България
Хакерспейсовете на Балканите и в България
 
WordPress основи в сигурността
WordPress основи в сигурносттаWordPress основи в сигурността
WordPress основи в сигурността
 
WordPress - working with themes
WordPress - working with themesWordPress - working with themes
WordPress - working with themes
 
WordPress Plugins
WordPress PluginsWordPress Plugins
WordPress Plugins
 
Лекция 00 - Въведение в WordPress
Лекция 00 - Въведение в WordPressЛекция 00 - Въведение в WordPress
Лекция 00 - Въведение в WordPress
 
Пари, енергия и растеж като нает, наемащ или самонает
Пари, енергия и растеж като нает, наемащ или самонаетПари, енергия и растеж като нает, наемащ или самонает
Пари, енергия и растеж като нает, наемащ или самонает
 
10 rules-tips
10 rules-tips10 rules-tips
10 rules-tips
 
11 sie-future
11 sie-future11 sie-future
11 sie-future
 
09 mu
09 mu09 mu
09 mu
 
08 buddypress
08 buddypress08 buddypress
08 buddypress
 
07 security-performance
07 security-performance07 security-performance
07 security-performance
 
06 basic-seo
06 basic-seo06 basic-seo
06 basic-seo
 
05 plugins
05 plugins05 plugins
05 plugins
 
04 design
04 design04 design
04 design
 
03 wp-guts
03 wp-guts03 wp-guts
03 wp-guts
 
02 content
02 content02 content
02 content
 
Лекция 1 Административният панел
Лекция 1 Административният панелЛекция 1 Административният панел
Лекция 1 Административният панел
 
Въведение в WordPress
Въведение в WordPressВъведение в WordPress
Въведение в WordPress
 
Курс по Drupal - Лекция 1
Курс по Drupal - Лекция 1Курс по Drupal - Лекция 1
Курс по Drupal - Лекция 1
 
Google: Summer of Code 2010 (SIP-Communicator)
Google: Summer of Code 2010 (SIP-Communicator)Google: Summer of Code 2010 (SIP-Communicator)
Google: Summer of Code 2010 (SIP-Communicator)
 

Security without obscurity

  • 1. Security без Obscurity Илия Горанов
  • 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
  • 8. Пример 1 Ауторизация <?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 />'; } } ?>
  • 9. Пример 2 Единичен Log In • При аутентикацията запазваме ID на сесията в базата данни в поле предвидено за целта, в таблицата с потребителите; • При всяко обръщение се проверява, дали ID на текущата сесия съвпада с последното записано в базата. Ако не съвпада – Log Out. • Ако имаме екран, който не изисква reload продължително време, може да се постави един Java Script (с AJAX), който през определен интервал да проверява, дали текущата сесия продължава да е валидна (а и да поддържа сесията “жива”)