Любитель хорошего ;)
С нами с 08.06.07
Сообщения: 16151
Рейтинг: 6269
|
Добавлено: 30/08/10 в 18:58 |
Суть: юзер на сайте вводит информацию, она потом в php ловится в строковую переменную, и далее создаётся запрос к базе mysql, добавляется то что юзер ввёл (мыло, возраст). Потом этот запрос выполняется.
Чтобы любопытный человек не мог ввести что-то своё, чтобы дополнительные его запросы к базе не начали выполняться, как тут предохраняться?
Код: | $query = "INSERT INTO $table (stolb1, stolb2) VALUES('$perem1', '$perem2')";
$result = MYSQL_QUERY($query); |
$perem1 и $perem2 принимаются через POST из формы.
Как-то нужно проверять что пришло в переменных $perem1 и $perem2, чтобы было безопасное добавление в базу?
|
|
|
|
php
С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410
|
Добавлено: 30/08/10 в 19:41 |
ну проверь коли так хочешь
а так вапще принимай через пост все и фильтруй.
|
|
|
|
Любитель хорошего ;)
С нами с 08.06.07
Сообщения: 16151
Рейтинг: 6269
|
Добавлено: 30/08/10 в 19:52 |
Если бы я чётко знал как и от чего фильтровать, то этого топика бы не было.
|
|
|
|
Гугль - хуйло! ла-ла-ла-ла-ла
С нами с 22.02.03
Сообщения: 1378
Рейтинг: 1478
|
Добавлено: 30/08/10 в 20:54 |
я не спец, но отсекаются спец символы обычно.
у меня в одном скрипте это делает строка
Код: [развернуть] | $QUERY_STRING = preg_replace("/[^\\w_-]/","",$QUERY_STRING); |
либо просто пропускать только набор символов которые используются, типа буквы, цифры, точка запятая и т.д., и @ - для мыла.
любому прогеру дело на 5 минут.
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 31/08/10 в 10:05 |
|
|
|
|
С нами с 01.03.07
Сообщения: 304
Рейтинг: 223
|
Добавлено: 31/08/10 в 11:22 |
обычно фильтруют
А вообще лучше четко прописать что мжет вводить юзер , если это поиск
то это буквы цифры пробел тире и подчеркивание. Больше им не надо в поиске
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 31/08/10 в 15:45 |
Вообще самый правильный и железный способ - это использовать параметризованные запросы. Если это mysql + php - то mysqli-интерфейс, там есть mysqli_stmt::prepare и прочие спизженные из нормальных языков типа Java+JDBC вещи.
|
|
|
|
Любитель хорошего ;)
С нами с 08.06.07
Сообщения: 16151
Рейтинг: 6269
|
Добавлено: 31/08/10 в 17:42 |
leroy_17 писал: | А вообще лучше четко прописать что мжет вводить юзер , если это поиск
то это буквы цифры пробел тире и подчеркивание. Больше им не надо в поиске |
Логично, а как это сделать? (если на стороне сервера)
То есть не перечислять что запрещено в preg_replace а наоборот, чтобы буквы, цифры, пробел, подчёркивание и тире пропускались.
Хотя суть одна, всё и так работает.
Всем спасибо!
|
|
|
|
С нами с 16.07.06
Сообщения: 886
Рейтинг: 892
|
Добавлено: 31/08/10 в 17:45 |
|
|
|
|
С нами с 01.02.07
Сообщения: 231
Рейтинг: 294
|
Добавлено: 31/08/10 в 20:51 |
Dr.Syshalt писал: | Вообще самый правильный и железный способ - это использовать параметризованные запросы. Если это mysql + php - то mysqli-интерфейс, там есть mysqli_stmt::prepare и прочие спизженные из нормальных языков типа Java+JDBC вещи. |
Верно, а если ещё и кешировать результат prepare() то можно секономить cpu базы который тратится на парсинг запроса и построение плана выполнения.
|
|
|
|
Любитель хорошего ;)
С нами с 08.06.07
Сообщения: 16151
Рейтинг: 6269
|
Добавлено: 31/08/10 в 21:19 |
Ух, много букв.. буду изучать.
А что думаете об этом?
Код: | $userinfo = mysql_real_escape_string($userinfo); |
Пишут, что ставится после коннекта к базе, и должно нормально отрабатывать инсерт и др. запросы, используя принятую инфу.
|
|
|
|
Любитель хорошего ;)
С нами с 08.06.07
Сообщения: 16151
Рейтинг: 6269
|
Добавлено: 31/08/10 в 21:20 |
arma: у wp красивые строчки.. хороший ход.
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 31/08/10 в 23:03 |
goodlover писал: |
А что думаете об этом?
Код: | $userinfo = mysql_real_escape_string($userinfo); |
|
Жить будет - способ дедовский, но работает.
|
|
|
|
С нами с 16.10.09
Сообщения: 343
Рейтинг: 419
|
Добавлено: 31/08/10 в 23:48 |
+1 к mysql_real_escape_string, и незачем огород городить.
|
|
|
|
С нами с 01.03.07
Сообщения: 304
Рейтинг: 223
|
Добавлено: 01/09/10 в 10:56 |
проблема в том что эта функа не все убирает, например если извернуться то можно закоментировать код и дописать другой запрос. Раньше в mysql проходили запросы типа chr(39) или написанные 16-ти ричным кодом символы . Т.е. кавычку можно написать не только как " ' ". На 5-ке mysql не пробовал так что точно не скажу на 4-ке работал такой метод взлома.
|
|
|
|
С нами с 15.04.08
Сообщения: 43
Рейтинг: 33
|
Добавлено: 01/09/10 в 18:22 |
либо
Код: | mysql_query("SELECT * FROM items WHERE id = '".mysql_real_escape_string($_POST['id'])."'"); |
важный момент тут это обрамление кавычками ('), так как если этого не сделать, то возможно, что поломают даже с mysql_real_escape_string.
или фильтровать переменные, проверять номер это или строка из определенных символов и тд.
|
|
|
|
С нами с 01.03.06
Сообщения: 629
Рейтинг: 620
|
Добавлено: 01/09/10 в 19:16 |
Noobus Boobus писал: | +1 к mysql_real_escape_string, и незачем огород городить. |
+1, если пофиг на валидность данных и задача только не дать базу коцнуть.
как вариант еще использовать mysqli + "плейсхолдеры" (но это на любителя, имхо могли бы упрощенную версию для популяризации сделать)
|
|
|
|
Любитель хорошего ;)
С нами с 08.06.07
Сообщения: 16151
Рейтинг: 6269
|
Добавлено: 01/09/10 в 19:40 |
Значит останавливаюсь на mysql_real_escape_string и кавычках.
Всегда их ставлю почему-то, и похоже что не зря.
Всех заплюсовал.
|
|
|
|