Здравствуйте Гость!


Запомнить.
Авто. вход.
Забыли пароль?
Регистрация

ПОДПИСКА Подписавшись по E-mail, Вы будете получать уведомления о новых статьях к себе на почту.
Подписатся на почтовую рассылку на сайте astranar.ru
Подписаться



ДОБАВЛЯЙТЕСЬ В ДРУЗЬЯ Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте на стене моего аккаунта.
Мой аккаунт Вконтакте
Мой аккаунт
Главная - PHP - Sql injection или sql инъекция.


Sql injection или sql инъекция.


Sql injection или sql инъекция

Продолжаем знакомиться с всевозможными вариантами взлома вашего прекраснейшего сайта. И на повестке дня, sql инъекции! Данная статья будет о том как защитить себя от sql инъекций! А начну с пред истории...

Не так давно, мой сайт пытались атаковать самыми различными вариантами sql-инъекций. И так как у (крекеров) ничего не получилось(я помешан на защите), я решил и вам показать как же обезопасить свой сайт от атак школьников или серьезных хакеров. Конечно нет системы которую нельзя взломать я это уже говорил в статье Защита php скрипта, межсайтовый скриптинг. Защита от атак на сайт, но повторение - мать учения. И поэтому даже моя система ни без греха, и мою систему в любом случае можно взломать. Да что уж там пентагон вон ломают в каждом месяце, они просто об этом не распространяются, а наказывают.

Так давайте же я вас просвещу про некоторые способы защиты.


К примеру, на сайте имеется база с статьями, которая выводится через $_GET запрос в браузере вида: ?id=5
так вот, если злоумышленник введет скажем такой код:

UNION SELECT * FROM users WHERE id='1' OR 1=1


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

Чтобы избежать этого, вам достаточно использовать несколько функций! А именно:

$id = mysql_real_escape_string($id); // Эта функция экранирует специальные символы в строке, используемой в SQL-запросе, принмимая во внимание кодировку соединения
$id = intval($id); // получаем целочисленное значение переменной строки
$id = trim($id); // Удаляем пробелы вначале и в конце строки


Но если кто внимательно читает все, что я тут пишу=) Мог бы заметить, что в комментариях к функции intval(); я написал правдивый анонс ее действий, а именно, что эта функция приводит число к целочисленному в том случае если оно имеет тип integer, то есть переменная не является строкой. В этом же случае любые данные могут пройти при правильном построении sql-инъекции.

Как же обезопасить себя и свой сайт от этого?!

Все так же просто, достаточно привести эту переменную к типу - integer. А делается это с помощью функции settype();

settype($id, "integer"); // $id теперь 5 (целое)


И вот теперь когда мы привели переменную к типу целочисленной, мы можем делать и другие операции фильтрации передаваемых данных!

$id = trim($id);
settype($id, "integer");
$id = intval($id);
$id = mysql_real_escape_string($id);


Такой порядок фильтрации входных данных будет правильным в данной ситуации! Данный порядок фильтрации данных не универсален, но для этого случая он подходит отлично.





Просмотров страницы: 4398
Урок добавлен: 15 Июня 2013

<<<Предыдущая статьяСледущая статья >>>

Копирование материалов разрешается только с указанием автора (Пальгов Олег) и индексируемой прямой ссылкой на сайт (https://astranar.ru/)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/palgov_oleg. Если Вы хотите оценить меня и мою работу, то напишите на стене моего аккаунта ВКонтакте.

Если Вы не хотите пропустить новые материалы на сайте, то Вы можете подписаться на обновления:
Подписаться на обновления


Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Ещё статьи по php:
Информация о IP-адресе пользователя через PHP
Работа с датами в php
Как сделать комментирование на своем сайте
Как сделать мультиязычный сайт или многоязычный сайт своими руками.


Комментарии (0)


Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Sql injection или sql инъекция.
Ты никогда не решишь проблему, если будешь думать так же, как те, кто ее создал.

Альберт Эйнштейн


Вступайте в группу!