Советы по Mysql

Печать RSS
323

_
Автор
Пришелец
0
Не раз встречал посты с ругательствами на SQL иньекции. Что это такое, как предотвратить это и напишите разные советы по обеспечению безопасности с Mysql.
А

Пришелец
0
Изначально фильтрировать все входящие данные перед записью в бд, mysql_real_escape_string() и htmlspecialchars() будет достаточно)

Мы ждем перемен!
0
B коде можете указать, как выглядет до и после?
Y

Землянин
0
Попробую описать как я понимаю как обезопасить себя от SQL injection
Понятно что если злоумышленник сможет выполнить SQL команды на сервере, ему достаточно будет узнать имя таблицы к примеру:
DELETE
FROM имя_таблицы;
Допустим, что у вас есть таблица пользователей Users, состоящий из трех полей: 'id', 'name', 'password' Запрос на выборку данных может выглядеть так:
SELECT *
FROM Users
WHERE id = $_GET[id]
В данном запросе поле 'id' сравнивается со значением переменной.
Если эта переменная получена как параметр сценария через URL или Cookie, и нет никаких проверок на запрещенные символы, то запрос уязвимый.
Можно модифицировать запрос
SELECT *
FROM Users
WHERE id = 10 OR name 'Администратор'
Чтобы этого не произошло, в таком случаю нужно точно представлять какие данные хранятся в таблице, и позволят передавать в качестве параметра те данные, которые разрешены. Например поле 'id' - это числовое поле, а значит в переменной кроме цифр 0-9 ничего не должно передаваться.
вот к примеру создай файл
<form action="" method="GET">
<input name="id">
</form>

<?php
$id = (int)$_GET['id'];
print('SELECT * FROM Users WHERE id='.$id)
?>
Таким же способом можно и строку обработать, а можно и через регулярные выражения сделать.
у PHP есть ряд функции
- Экранирование mysql_real_escape_string

Через SQL запросы можно получить доступ к файловой системе
Например, такой код который сохраняет в PHP файле сценарий:
SELECT '<?php system('параметр') ?>' INTO OUTFILE 'shell.php'
Тут могут вытекать разные последствия
Изменил: YouMobe (09.03.2014 / 11:59)

Чатланин
0
Не знаю как другие, но я так делаю. Например поля логин и пароль. Ограничиваю длину логина например на 12-13 символах, ну и пароль 8-12 символов. И при приеме данных просто проверяю длину строки, если длина строки больше, то посылаю по дальше. Ну и попробуйте теперь написать sql запрос с длиной не более 12 символов. ))
_
Автор
Пришелец
0
5. Аварский, а если нужно больше символов? Например сбщ в лс?
Y

Землянин
0
Avrong (9 Марта 2014 / 15:05)
5. Аварский, а если нужно больше символов? Например сбщ в лс?
Аварцы общаются коротко.D

Чатланин
0
5. Аварский, > пароль 8-12 символов
не, ну это ппц
Y

Землянин
0
shilo (10 Марта 2014 / 12:47)
5. Аварский, > пароль 8-12 символов
не, ну это ппц
Для подбора облегчил

Землянин
0
mysql_escape_string(htmlspecialchars(stripslashes($ololo)))
вот и все проблемы
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск