Фильтрация
1.
‮PLATINUM (25.05.2012 / 22:17)
Пишу крупный скрипт, но вот хотелось бы советов по фильтрации данных. От xss вроде помогают stripslahes, htmlspecialchars и в этом духе. От php include помогает не использование переменных в конструкции include. А что от SQL inj посоветуете?
2.
Виктор (25.05.2012 / 22:20)
mysql_real_escape_string()
3.
‮PLATINUM (25.05.2012 / 22:21)
2.
venix, а об этом думал. Но ведь это не панацея от всей заразы?
4.
Сергей (25.05.2012 / 22:21)
mysql_real_escape_string достаточно от скул иньекций
5.
mix (25.05.2012 / 22:22)
abs() и intval() - если числа
htmlspecialchars() и mysql_real_escape_string() - для символов и букв
6.
‮PLATINUM (25.05.2012 / 22:23)
Vitamin aka mix (25 Мая 2012 / 22:22)
abs() и intval()
Это от подстановку всякого бреда в integer переменную?
7.
mix (25.05.2012 / 22:23)
platinum дамаль (25 Мая 2012 / 22:23)
Это от подстановку всякого бреда в integer переменную?
дополнил 5-ый пост
8.
‮PLATINUM (25.05.2012 / 22:25)
А что насчёт переменной, где одна буква хранится? Наверно substr($var,0,1); ?
9.
mix (25.05.2012 / 22:26)
в смысле? ты про ограничения?
10.
Богдан (25.05.2012 / 22:46)
8. $var[0] - первый символ строки
11.
‮PLATINUM (25.05.2012 / 23:17)
9.
Vitamin aka mix, да там в скрипте пол например определяет переменная из одной буквы
Добавлено через 01:59 сек.
А как думаете, лучше помучатся с базой и сразу делать правки в базе или переносить данные юзера в файл и там с ними работать. Ну и в базу потом.
12.
ramzes (25.05.2012 / 23:22)
11.
platinum дамаль, $pol = ($pol=='M') ? 'M' : 'W';
не надо вообще длину мерить, если известно заранее какие параметры принимаются
13.
mix (26.05.2012 / 01:19)
platinum дамаль (25 Мая 2012 / 23:17)
9. Vitamin aka mix, да там в скрипте пол например определяет переменная из одной буквы
Добавлено через 01:59 сек.
А как думаете, лучше помучатся с базой и сразу делать правки в базе или переносить данные юзера в файл и там с ними работать. Ну и в базу потом.
создай форму select'ом и укажи пол М и Ж. проверяй переменную и заноси в бд
14.
Сергей (26.05.2012 / 01:55)
для базы достаточно майсклреалэскейпстринг(), для чисел абс(интвал()), для хсс - хтмлспециалчарс()
15.
ZaRiN (26.05.2012 / 03:51)
Автор давно пора юзать плюшки, которые производители ПО нам предоставляют, в частности MySQLi и подготовленные процедуры в нем.
А если хочешь использовать устаревшие технологии, то достаточно mysql_real_escape_string или для чисел intval, что бы не поймать sql инъекцию.
16.
KOZZ (26.05.2012 / 06:25)
15.
Жадный лепрекон, использовать prepaared statements только ради фильтрации - разве не глупо?
17.
ramzes (26.05.2012 / 07:33)
Глупо, и замедляет работу скрипта
18.
Андрюха (26.05.2012 / 10:18)
Не глупо ничО. Для этого и придумали
19.
KOZZ (26.05.2012 / 10:25)
18.
Wapruks,
;
20.
ramzes (26.05.2012 / 10:41)
18.
Wapruks, сравни с шаблонами и без.
Без повторов запросов.
Скорость упадет и прилично
21.
KOZZ (26.05.2012 / 11:28)
21.
ZiGR, mysqli_real_escape_string() и htmlspecialchars() разве не справятся с нулл байтом, байтом разворота?
22.
ramzes (26.05.2012 / 12:39)
22.
eGo Работает на Себя, на сколько я помню в роторе функция check прям в первой строке содержит хтмлспециалчарс.
Я так же помню, что байт разворота в нем работал одно время.
Видимо хтмлспециалчарс не удаляет его
23.
ZaRiN (26.05.2012 / 16:46)
20.
ramzes, падение в скорости не существенное, зато с подготовленными выражениями можно не бояться sql inj и спать спокойно. А если запрос в цикле будет, так скорее mysql_real_escape_string будет больше занимать процессорного времени, чем подготовленное выражение, которое кешируется в ОЗУ.
Но это уже личное дело каждого, можно ведь вместо mysql_real_escape_string написать свой велосипед)
24.
ramzes (26.05.2012 / 16:51)
25.
Жадный лепрекон, а если запрос в цикле, то вероятнее всего организация паршивая))
Тем не менее, разница в скорости есть.
Предпочитаю фильтровать до записи.
И париться с иньекциями не надо, и главное, обрабатывать каждый раз на выводе не надо
25.
ZaRiN (26.05.2012 / 17:01)
26.
ramzes, я не вижу критической разницы в скорости выполнения, но удобство на лицо. Сразу видно какой где тип, не нужно каждую строку обрабатывать mysql_real_escape_string и т.д.
26.
ramzes (26.05.2012 / 17:30)
27.
Жадный лепрекон,
100 человек читают страницу со 100 записями. Это уже 10000 вызовов фильтра
27.
ZaRiN (26.05.2012 / 17:59)
28.
ramzes, а почему 10000? вроде всего 100 будет.
$sql = $mysqli->prepare("SELECT * FROM `tbl` WHERE `id`=? ;");
$sql->bind_param("i",$id);
$sql->execute();
$sql->bind_result($text);
while($sql->fetch()) {
echo $text;
}
$sql->close();
28.
ramzes (26.05.2012 / 18:40)
29.
Жадный лепрекон, ты о чем вообще?
На выводе у тебя если фильтр будет стоять, то 100 вызовов на рыло, 100 человек (или просто запросов) вызовут 100*100 = 10000 в примерно один момент.
А это уже куда больше чем ноль
29.
ZaRiN (26.05.2012 / 18:50)
30.
ramzes, 100 запросов на страницу? о_О
даже в вордпресе такого количества запросов на страницу нету
30.
ramzes (26.05.2012 / 20:21)
31.
Жадный лепрекон, да при чем тут запросы?
100 записей, я же сказал, 100 вызовов фильтра, а не 100 обращений к бд
31.
ZaRiN (26.05.2012 / 21:43)
32.
ramzes, так ты уже определись с чем-то одним, а то
100 человек читают страницу со 100 записями.
На выводе у тебя если фильтр будет стоять
а теперь уже появляется запись %) да и что ты собрался записывать на странице 100 раз? Это уже из рода фантастики, по типу не ходите люди пешком, а то если идти 100500 км то очень долго - всегда ездите на машине.
32.
ramzes (26.05.2012 / 21:52)
Пипец.. я думал я на русском пишу..
Забей, все что я пишу ты почему то понимаешь совершенно неверно
Добавлено через 02:07 сек.
Запись = строка = пост -> не обращение к бд.
Записка на худой конец
33.
ZaRiN (26.05.2012 / 21:57)
34.
ramzes, можешь примерный код написать, можно без использования подготовленных выражений, а то я, честно говоря, не пойму о чем речь. Шаблон отправляется всего 1 раз, будь там хоть 100 записей, хоть 100000. Далее уже посылаются только данные, т.е. шаблон отправлять 100 раз не нужно.
34.
ramzes (26.05.2012 / 22:09)
Забей.
я вообще не говорил про шаблоны, мускули и т.д.
Я говорил о ФИЛЬТРАЦИИ ДО ЗАПИСИ ИЛИ ПОСЛЕ.
35.
ZaRiN (26.05.2012 / 22:16)
36.
ramzes, тю блин, я думал ты о подготовленных выражениях
36.
Андрюха (28.05.2012 / 14:27)
19. Ты либо аргументируй,либо не мути воду и не пиши просто так
URL:
https://visavi.net/topics/32187