Защита от SQL-инъекции с помощью .htaccess.

запостил: 19 Июня 2009 г.

SQL-инъекция, SQL-инъекция!!! Все уши уже прожужжали с этими SQL-инъекциями. Да, это действительно далеко не новый вид атаки на веб-сервера в целом и сайты в частности. Опасно? Конечно опасно, не буду умалять “достоинств” SQL-инъекций. Сам отношусь к тем параноикам, которые стараются проверять каждый параметр в каждой функции, причем неважно, откуда он пришел. Верить, как Вы понимаете, нельзя никому и ничему, а себе и подавно.

С .htaccess-файлами мне довелось столкнуться в свое время совершенно по другому поводу: тогда, когда нужно было впервые сделать динамический сайт с ЧПУ (человеко-понятными URL'ами, токарные и прочие фрезерные рабочие места здесь совершенно не при чем).

Человеко-понятный URL – это URL вида http://www.site.ru/value1/value2/, то есть адрес сайта формируется безо всяких символов “?” и “=”. Во-первых, это, как минимум, красиво. Во-вторых, один довольно крупный поисковик (не буду показывать пальцем, просто намекну, что его название начинается на “Ра”, а заканчивается на “мблер”) из рук вон плохо индексирует динамические страницы (точнее, динамические адреса, явными показателями которых как раз и является указание параметров после символа “?”). А вот ЧПУ, или их еще называют статическими адресами, проглатываются с большим аппетитом любыми поисковыми системами.

Конечно, делать сейчас статичный сайт только ради красивых URL'ов по меньшей мере глупо, поэтому один из вариантов создания адресов, внешне похожих на статические, но при этом позволяющих пользоваться всей мощью динамических страниц – это как раз использование файла .htaccess. Не буду сейчас рассказывать о том, что еще можно и нужно делать с этим файлом, лучше вернемся к нашим баранам, точнее к URL'ам. Разберем все на примере:


RewriteEngine On
Options +FollowSymlinks -Indexes
RewriteBase /
RewriteRule ^.htaccess$ -[F]

RewriteRule ^(news+)/{0,1}$ news.php?module=$1
RewriteRule ^(news+)/(a-z]+)/([0-9]+)/{0,1}$ news.php?&module=$1&view=$2&id=$3

Итак, что же дает нам такое содержимое в файле .htaccess? RewriteEngine On – разрешает преобразование псевдостатической ссылкиOptions +FollowSymlinks -Indexes – опции: данная конфигурация разрешает использование символьных ссылок и запрещает просмотр каталогов (если в каталоге нет индексного файла, то будет выдана страница 403-ей ошибки (“Доступ запрещен”)). RewriteBase / - указывает, что преобразования ссылок будут вестись из корневого каталога сайта. RewriteRule ^.htaccess$ -[F] – запрещаем файл .htaccess для просмотра пользователями (обычно этот запрет выставляется администратором сервера еще при настройке веб-сервера, но мало ли, чего там админы Вашего хостера прописали, безопасность лишней не бывает).

На это предварительные действия закончены, приступаем к написанию правил для страниц (я приведу примеры для страницы новостей). А как Вы хотели? Создание сайтов - это не такой уж и простой и легкий процесс. Иногда достаточно мелочи, чтобы все Ваши усилия по защите были напрасными. Но вернемся к правилам:

RewriteRule ^(news+)/{0,1}$ news.php?module=$1 Страница вида http://www.site.ru/news/ (последнего слэша может и не быть, о чем говорит /{0, 1}), и в переменной $_GET['module'] лежит значение “news” (в этом блоге, например, я использую $_GET['module'] для определения выводимой в верхний левый угол картинки, ну и не только для этого). А теперь строчка еще вкуснее:

RewriteRule ^(news+)/(a-z]+)/([0-9]+)/{0,1}$ news.php?&module=$1&view=$2&id=$3 Здесь у нас имеется три блока (блоки заключены в круглые скобки), каждый из которых передается в переменную массива $_GET (переменные $_GET['module'], $_GET['view'] и $_GET['id']). Например, адрес http://www.site.ru/news/post/4/ отобразит новость с ID = 4, а http://www.site.ru/news/year/2007/ покажет список новостей за 2007-й год. Конечно, здесь все зависит от того, какие параметры и каким образом Ваши скрипты будут обрабатывать.

Ну а теперь то, ради чего вообще этот пост и был написан. Как Вы можете увидеть, параметры переадресации обрабатываются при помощи регулярных выражений. И если попробовать передать в параметр $_GET['id'] какое-либо значение, кроме числа, то вместо инъекта злобный хакер увидит страницу 404-й ошибки. А если учесть, что правила, указанные в .htaccess выполняются до PHP-скриптов, то можно быть уверенным, что корректированный таким вот образом запрос даже не попробует выполниться. Кстати, приведенное в примере выражение можно сделать еще жестче, указав во втором параметре не строку латинских символов нижнего регистра, а непосредственные значения, которые может принимать этот параметр.

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

Внимание! При копировании данного материала обязательна прямая текстовая ссылка на эту страницу.

<< вернуться

Очень надеюсь, что этот пост был для Вас полезен. А если так - поделитесь ссылкой со своими друзьями. Уверен, они будут не против. :)

 

А еще лучше выскажите свое мнение по этой теме.

На эту тему говорят:

Andrey

10 Февраля 2010 г.

Подскажите, а ссылка вида http://www.site.ru/news/post/4/ должна формироваться скриптами или ее можно также получить с помощью htaccess?

ZeroXor

17 Февраля 2010 г.

Такая ссылка формируется скриптами, правила в .htaccess лишь разбирают ее, записывая в соответствующие переменные значения из адресной строки, с которыми PHP-код в дальнейшем и работает.

P.S. Извините, что долго не отвечал.

Если Вам есть что сказать, скажите это прямо здесь и сейчас.

При написании комментария можно использовать bb-теги [b][i][u], а также [quote] для цитирования.

Введите код, изображенный на картинке

RSS-лента блога веб-фрилансера Следуй в Twitter Я на Facebook

Последние новости:

Розетки в общественных местах перестанут быть бесплатными.

В Sony придумали, как владельцам кафе можно брать деньги не только за Wi-Fi, но и за электричество.

Apple есть в половине семей. Правда, американских.

За что любят пользователи Apple эти дорогие "игрушки"?

Минздрав предупреждает: iPad вредит Вашему здоровью.

Новые технологии приносят не только новые удобства... но и новые болезни.

РПЦ призывает выйти из Сети на время Великого поста.

Всеволод Чаплин попросил верующих выйти из Интернета. Жаль, что только на время Великого поста.

Apple хочет в 3D.

Да-да, уважаемый мой читатель, крутящегося во все стороны двумерного мира им уже мало...

все новости

Теги постов:

Архив постов:

2012

Май

Апрель

Март

Февраль

Январь

2011

2010

2009

Блогролл