Это старая копия сайта, дизайн не сохранился; //sorry
get it

PHP Request Filter (Anti Sql Injection)

Пятница, 11 ноября 2011 г.
Рубрика: Coding
Метки: |
Просмотров: 2973
Подписаться на комментарии по RSS

Недавно один мой хороший знакомый попросил меня написать для него универсальную защиту против SQL-INJECTIONs для PHP движка, который он использовал.

Поколдовав минут 20, получился примерно следующий несложный исходник.

/* 
 * simple QUERY protect script v. 0.1
 * by k0xa (http://qeeq.ru)
 * 
 * Инструкция: отредактировать $blackfile (файл с забаненными IP) и дать ему права 666
 * Отредактировать почту ($admin_mail), куда будут приходить уведомления, если вас взломают
 * 
 * Как использовать: подключить этот файл в начале любых php файлов, которые вы хотите защитить:
 * 
 * include_once('protect.php');
 * 
 * Готово
 */
$blackfile = 'blacklist.txt';
$admin_email = '[email protected]';
//распространненые ключевые слова для осуществления SQL-INJECTION (которые мы будем отлавливать)
$bad_words = "UNION SELECT INSERT schemata FROM";
//IP юзера
$user_ip = $_SERVER['REMOTE_ADDR'];
if (file_exists($blackfile)) {
	$blacklist = file_get_contents($blackfile);
    //ищем IP юзер в блек листе, если находим, то красиво посылаем	
	if (preg_match("/".preg_quote($user_ip)."/is", $blacklist)) {
		exit("You are banned. Go fuck yourself :) ");
	}
}
//составить массив "плохих" слов
$bad_list = explode(' ', $bad_words);
//данные для обработки: в случае POST запроса имеем все значения, склеенные в строку через пробел
//в случае GET и всего остального - QUERY_STRING
$line = $_POST?implode(" ", $_POST):$_SERVER['QUERY_STRING'];
//искать по всем словам
foreach ($bad_list as $re) {
	//если находим плохое слово
	if (preg_match("/$re/i", $line)) {
		
		// добавляем юзера в блек
		$fp = fopen($blackfile, 'a+');
		fputs($fp, "$user_ip\n");
		fclose($fp);
		
		//намылить админу об инциденте
		mail($admin_email, 'Hacking Attempt!', "IP:$user_ip\nQUERY:$line\nBANNED: YES");
		exit('security error');
	}
}
?>

Исходник очень простой и детально откомментированный, проблем с использованием возникнуть не должно.

Для использования просто подключите этот файл во все php-файл, которые вы хотите защитить от SQL-INJECTION.

Внимание: данный код не дает 100% гарантии на защиту от атаки типа SQL INJECTION, но вместе с тем он обеспечивает дополнительную защиту.

Если у меня выдастся свободная минутка, я опубликую еще более усиленный вариант Protect.php

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com Google Buzz technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Комментариев: 2

  1. Спасибо большое! Ждём обновлений !

  2. Спасибо!!! С нетерпением ждём публикации с более усиленным вариантом Protect.php, подходящим для любого сайта на .php

Оставьте комментарий!

Используйте нормальные имена.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)

/* Under Construction */

web-parser.ru
r-tools.org
koxa22.livejournal.com