SearchEngines.bg

Това е примерно съобщение за гост. Регистрирайте безплатен акаунт днес, за да станете потребител на SearchEngines.bg! След като влезете, ще можете да участвате в този сайт, като добавите свои собствени теми и публикации, както и да се свържете с други членове чрез вашата лична входяща кутия! Благодарим ви!

Частична защита срещу SQL injection с .htaccess

bgkulinar

Меринджей
Нещо много просто, но ефективно срещу SQL injection. За да може да ползвате кода, трябва да имате Apache сървър, включен mod_rewrite и естествено възможност за промяна на .htaccess. Намирате
Код:
Options +FollowSymlinks
RewriteEngine On
и на следващия ред слагате
Код:
RewriteCond %{QUERY_STRING} union [NC,OR]
RewriteCond %{QUERY_STRING} select [NC,OR]
RewriteCond %{QUERY_STRING} truncate [NC,OR]
RewriteCond %{QUERY_STRING} drop [NC,OR]
RewriteCond %{QUERY_STRING} update [NC]
RewriteRule .* %{REQUEST_URI}? [R,L]
По този начин избягвате възможността да ви направят SQL injection чрез GET.

N.B.!!! Внимателно прегледайте вашите URL да не съдържат някоя от думите: union, select, truncate, drop, update, защото ще блокирате и тях!!!

Тествано под Apache 1.3.XX, скоро ще тествам дали върви под двойката.

Приемам всякакви забележки, които могат да доведат до подобряване на кода.
 
Re: Частична защита срещу SQL injection с .htaccess

Предполагам, че има доста хора, които не могат да го инсталират на своя хостинг, а сигурността не е глупости.
 
Re: Частична защита срещу SQL injection с .htaccess

Няма да свърши същата работа. Освен това е PHP код, а дадения от мен код е за Apache ;).
 
Re: Частична защита срещу SQL injection с .htaccess

predpriemach.com е прав, SQL injection е опасен само в sql заявки и точно там е мястото за неутрализирането му. За PHP, ползването на mysql_real_escape_string, върху стойности получени от 'враждебна среда' при генерирането на заявката е напълно достатъчно:

http://bg2.php.net/mysql_real_escape_string
 
Re: Частична защита срещу SQL injection с .htaccess

OK, не споря, че PHP трябва да се пише така, че да не допуска SQL injection. Не споря за това, че има модули, които подобряват сигурността на Апачи сървър. Просто съм дал прост и лесен начин за избягване на SQL injection за хора, които няма познания по PHP или други езици, на които им вървят сайтовете, но имат Apache server.

Освен това не съм съвсем сигурен, че mysql_real_escape_string() би помогнало в случаи като този:
Код:
http://www.peyron.com/release.php?id=-26+union+select+1,2,3,concat(version(),user()),database(),6,7,8/*
 
Re: Частична защита срещу SQL injection с .htaccess

Ето проба на този хак с 'mysql_real_escape_string':

http://www.bulgarian-offers.com/cached_page.php?page_id=-26+union+select+1,2,3,concat(version(),user()),database(),6,7,8/*

резултата е следния:
SELECT <колона> FROM <таблица> WHERE id = '-26 union select 1,2,3,concat(version(),user()),database(),6,7,8/*'
 
Re: Частична защита срещу SQL injection с .htaccess

@bgkulinar хостинг без mod_security не съм ползвал никога, съмнява ме и да ползвам. То тоя мод вече си е в default инсталацията даже.

А пък mysql_real_escape_string е deprecated и от PHP6 нататък няма да я има, барабар с magic_quotes, safe_mode, register_globals и т.н. така че не разчитайте на нея. Има много по-добри решения като:
htmlspecialchars (лекува и XSS)
htmlentities (лекува и XSS, иска и правилен енкодинг)
regular expressions (лекува и логически грешки, но трябва да се внимава. Ако се напише кадърно, ще те спаси и от XSS)
addslashes (лекува само SQL Injection)
strip_tags (лекува само XSS)
 
Re: Частична защита срещу SQL injection с .htaccess

А сега пък като се замислих тия SELECT, DROP, TRUNCATE етц ми е много интересно как ще ги изпълниш, при положение, че PHP няма право да изпълнява повече от една заявка в една mysql_query() команда (именно поради тази причина). Т.е. ти филтрираш нещо, което така или иначе няма как да стане и то в ситуацията, когато си си взел некачествен хостинг с някой бастун администратор :)
По-скоро филтрирайте за
Код:
' or 1 #
 
Re: Частична защита срещу SQL injection с .htaccess

id-то като премине през
$id = (int) $id;
няма да има никакъв проблем, за стрингове escape.
 
Re: Частична защита срещу SQL injection с .htaccess

Добре де, ще го кажа по друг начин: редирект 301 може да се прави и през ПХП, всички обаче предпочитат с .хтаццесс. Всички кодове, които съм гледал за sql injection съдържат поне една от изброените заявки. Както и да е, това е просто идейка. Всеки си решава как ще действа по сигурността си.
 
Re: Частична защита срещу SQL injection с .htaccess

По-лесно е с htaccess с два реда ти редиректва всички директории и файлове, а с php понякога трябва да едитваш всеки файл и да слагаш редирект.
 

Горе