Советы по Mysql

1. ____________________ (08.03.2014 / 23:52)
Не раз встречал посты с ругательствами на SQL иньекции. Что это такое, как предотвратить это и напишите разные советы по обеспечению безопасности с Mysql.

2. Алексей (09.03.2014 / 04:10)
Изначально фильтрировать все входящие данные перед записью в бд, mysql_real_escape_string() и htmlspecialchars() будет достаточно)

3. Артур (09.03.2014 / 05:19)
B коде можете указать, как выглядет до и после?

4. YouMobe (09.03.2014 / 11:57)
Попробую описать как я понимаю как обезопасить себя от 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'
Тут могут вытекать разные последствия

5. Абдула (09.03.2014 / 13:17)
Не знаю как другие, но я так делаю. Например поля логин и пароль. Ограничиваю длину логина например на 12-13 символах, ну и пароль 8-12 символов. И при приеме данных просто проверяю длину строки, если длина строки больше, то посылаю по дальше. Ну и попробуйте теперь написать sql запрос с длиной не более 12 символов. ))

6. ____________________ (09.03.2014 / 15:05)
5. Аварский, а если нужно больше символов? Например сбщ в лс?

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

8. shilo (10.03.2014 / 12:47)
5. Аварский, > пароль 8-12 символов
не, ну это ппц

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

10. Алексей (10.03.2014 / 16:24)
mysql_escape_string(htmlspecialchars(stripslashes($ololo)))
вот и все проблемы

11. Богдан (10.03.2014 / 17:30)
10. параноя? достаточно одного mysql_escape_string

12. egoist (11.03.2014 / 02:38)
Не помещай в БД данные без обработки. Это можно сделать либо с помощью подготовленных выражений, либо обрабатывай параметры вручную, а значит:
- все числовые параметры должны быть приведены к нужному типу
- все остальные параметры должны быть обработаны функцией mysql_real_escape_string() и заключены в кавычки, как уже сказали выше))

URL: https://visavi.net/topics/40297