Защита форм от SQL-инекций на пальцах
Защита форм от SQL-инекций на пальцах
Введение
При разработке, более или менее больших проектов, программистам приходится использовать БД (базу данных). Чем в свою очередь обязательно пытаются воспользоваться разного рода хакеры и взломщики. В связи с этим, все данные, которые получаются из _POST или _GET запросов перед добавлением в БД нужно фильтровать.

Как производится фильтрация?
Фильтрация производится следующим образом:
$text_to_check = mysql_real_escape_string ($_GET["запрос"]);
  $text_to_check = strip_tags($text_to_check);
  $text_to_check = htmlspecialchars($text_to_check);
  $text_to_check = stripslashes($text_to_check);
  $text_to_check = addslashes($text_to_check);  
  $_GET["запрос"] = $text_to_check;

Но тут опять-же остаются вопросы: А если нужно заносить в БД какие-либо специальные символы. Выход есть:
function escape_inj ($text) {
  $text = strtolower($text); // Приравниваем текст параметра к нижнему регистру
  if (
    !strpos($text, "select") && //
    !strpos($text, "union") && //
    !strpos($text, "select") && //
    !strpos($text, "order") && // Ищем вхождение слов в параметре
    !strpos($text, "where") && //
    !strpos($text, "char") && //
    !strpos($text, "from") //
  ) {
    return true; // Вхождений нету - возвращаем true
  } else {
    return false; // Вхождения есть - возвращаем false
  }
}
$section = $_GET[section]; // Читаем параметр
if (!escape_inj ($section)) { // Проверяем параметр
  echo "Это SQL-инъекция.";
  exit ();
} else {
  $result = mysql_query ("SELECT * FROM `tbl_name` WHERE `section` = $section ");
  ... // Продолжаем работу
}

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

На сегодня на этом все. Ждите следующих публикаций, с уважением iZmobil aka jrtrader.

Если помог - жми + в репу или копейку на: R376865577299


Рубрика: Информация » Программирование   |   Автор: jrtrader   |   Просмотры: 4792
Комментариев: 60
Публикаций: 2
ICQ: 3374475
- 107 +
  Автор: FreeWolfAlex   |   Группа: Программисты   |   Дата: 09 декабря 2011  


Некуя се велосипед забодижил, тут есть более простое решение, и что ты написал

это обходится так де как и скобки и кавычки

$text_to_check = mysql_real_escape_string ($_GET["запрос"]);
$text_to_check = strip_tags($text_to_check);
$text_to_check = htmlspecialchars($text_to_check);
$text_to_check = stripslashes($text_to_check);
$text_to_check = addslashes($text_to_check);
$_GET["запрос"] = $text_to_check;

тут в последней строке имхобред:
$_GET["запрос"] = $text_to_check;

нафига тебе опятьже массив $_GET когда тебе нужна переменная fellow с которой проще работать

ладно, это GET запрос, а то что POST существует, думаеш он не ломается? он еще опаснее чем GET
Комментариев: 738
Публикаций: 50
ICQ: --
- 4 +
  Автор: Green-wm   |   Группа: Пользователи   |   Дата: 09 декабря 2011  
Мда. А зачем тогда тут выкладывать? Копипаст блин.
Комментариев: 186
Публикаций: 22
ICQ: --
- 5 +
  Автор: -xXx-   |   Группа: Администраторы   |   Дата: 09 декабря 2011  
Цитата: Green-wm
Мда. А зачем тогда тут выкладывать? Копипаст блин.

Суть в том, что человек является автором этой статьи, но сначала он опубликовал ее не на этом сайте. Я проверил ее на уникальность - показало 70% уникальности, просто не успела эта статья проиндексироваться в поисковых системах.

Удалять новость не буду, т.к. она может быть многим полезна. Ссылку на первоисточник добавил в статью.

На будущее - пожалуйста, не размещайте не уникальные статьи на этом сайте.
Комментариев: 13
Публикаций: 2
ICQ: 622855453
- 12 +
  Автор: jrtrader   |   Группа: Пользователи   |   Дата: 09 декабря 2011  
Да по поводу статьи, bizze только запустил проект, поэтому я сначала туда кинул, чтоб его поддержать. А так как проект не раскручен еще (пользователей всего 5 человек со мной) решил с массами поделиться

тут в последней строке имхобред:
$_GET["запрос"] = $text_to_check;


согласен если нужна переменная, то бред, а если делать промежуточную функцию, то как-раз таки не бред, а очень даже нужно. ну это кому как, зависит от ситуации
Комментариев: 240
Публикаций: 6
ICQ: 573235722
- -896 +
  Автор: VELIK505   |   Группа: Программисты   |   Дата: 09 декабря 2011  
Если ты используешь mysql(i)_real_escape_string то уже не надо использовать:
stripslashes и addslashes
а htmlspecialchars причём тут? Открою небольшой секрет htmlspecialchars от XSS ты через ней должен пропускать инфу перед выводом в поток.
Комментариев: 60
Публикаций: 2
ICQ: 3374475
- 107 +
  Автор: FreeWolfAlex   |   Группа: Программисты   |   Дата: 09 декабря 2011  
jrtrader,
так это не твоя статья fellow

http://govnokod.ru/7536
http://visavi.net/blog/print.php?id=196&SID=35bd57b37c8
Комментариев: 738
Публикаций: 50
ICQ: --
- 4 +
  Автор: Green-wm   |   Группа: Пользователи   |   Дата: 09 декабря 2011  
Цитата: FreeWolfAlex
http://visavi.net/blog/print.php?id=196&SID=35bd57b37c8

facepalm Мда. Код одинаковый. Копи паст. facepalm
Комментариев: 138
Публикаций: 2
ICQ: 567777707
- 490 +
  Автор: Forceman   |   Группа: Пользователи   |   Дата: 09 декабря 2011  
А еще проще все влить это в функцию и вызывать функцию в скрипте, чтобы каждый раз не писать столько кода для запросов.
Комментариев: 13
Публикаций: 2
ICQ: 622855453
- 12 +
  Автор: jrtrader   |   Группа: Пользователи   |   Дата: 09 декабря 2011  
Статья сама по себе моя, это те коды которые использовал я в работе над своим скриптом. Примеры конечно я от куда-то брал

VELIK505
Если ты используешь mysql(i)_real_escape_string то уже не надо использовать:
stripslashes и addslashes
а htmlspecialchars причём тут? Открою небольшой секрет htmlspecialchars от XSS ты через ней должен пропускать инфу перед выводом в поток.


И реально ты открыл я про sql знаю малова-то, учюсь из уже готовых скриптов и только если уж сильно куда-то упираюсь начинаю искать инфу по нету... обычно пытаюсь сам изобрести велосипед.


Цитата: FreeWolfAlex
http://govnokod.ru/7536

И вот за это спасибо, не знал про етот прикольный сайтец.

кстате я использовал эту фигню изночально как отдельную функцию.

И еще к админам: если я тут накосячил в силу моих немногих знаний sql прошу убрать публикацию или изменить ее типа "так не нужно делать"

Всем спасибо за понимание... и прошу извинить я только учюсь
Комментариев: 6
Публикаций: 0
ICQ: --
- 24 +
  Автор: user0001   |   Группа: V.I.P.   |   Дата: 09 декабря 2011  
копирайтеры хреновы, сюда посмотрите http://shopforbux.ru/news/ а потом нападайте на автора за копипаст. человек пользу хотел принести!
Комментариев: 159
Публикаций: 10
ICQ: 407464816
- 174 +
  Автор: bizze   |   Группа: V.I.P.   |   Дата: 10 декабря 2011  
-xXx-,
Укажи пожалуйста источник так, что б его хоть было видно, либо восстанови комментарий.
Например (с левой стороны):
Источник: Majorus.ru

winked
Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.