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


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

ПОДПИСКА Подписавшись по 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);


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





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

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

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

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

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


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

Ещё статьи по php:
Использование tpl-файлов
Вывод из mysql
Работа с датами в php
Готовый Движок для своего собственного блога


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


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

Сенека


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