Ваши ф-ции для фильтрации данных.
1.
Удаленный 06.04.2009 / 19:14
Добрый вечер.
Какие Вы используете ф-ции для фильтрации в формах ввода текста и GET-запросах?
Всмысле, ограничиваетесь стандартными (типа htmlspecialchars) или добавляете какие-то свои?
2.
HOOF 06.04.2009 / 19:23
ещё некоторые знаки фильтрую

и т.п.
3.
Михаил 06.04.2009 / 19:23
Смотря что и для чего фильтровать
4.
Удаленный 06.04.2009 / 19:25
Ну в основном я спрашиваю.
5.
Titov 06.04.2009 / 20:24
вот например иногда так делаю
<?
function filter($str) {
$str = htmlspecialchars($str);
$str = mysql_real_escape_string($str);
return $str;
}
$url = filter($url);
?>
6.
DmitryDick 06.04.2009 / 20:49
Собрать в одну функцию все стандартные (=
7.
Дмитрий 06.04.2009 / 21:19
я так фильтрую:
function bug($msg){
$msg=str_replace("\"","",$msg);
$msg=htmlspecialchars($msg);
$msg=str_replace("'","",$msg);
$msg=str_replace("\$","",$msg);
$msg=str_replace("$","",$msg);
$msg=str_replace("\\","", $msg);
$msg=str_replace("./","", $msg);
$msg=str_replace("%","", $msg);
$msg=str_replace("\0","", $msg);
$msg=mysql_escape_string($msg);
$msg=stripslashes(trim($msg));
return $msg;};
8.
Михаил 06.04.2009 / 21:20
#7, а для чего это все вырезать?
9.
Дмитрий 06.04.2009 / 21:31
Мих, я мускул учу, какой функцией фильтровать данные на мускул)
10.
Павел 06.04.2009 / 23:14
7,наверна самая глупая функция,зачем сначала доба*** слеши а потом удалять?
11.
Михаил 06.04.2009 / 23:37
#9, от sql-инъекций mysql_escape_string
12.
Андрюха 07.04.2009 / 05:45
function check($var){
return mysql_escape_string(addslashes(htmlspecialchars($var,ENT_QUOTES)));
}
Вот моя
13.
Михаил 07.04.2009 / 09:15
#12, эта функция трижды слэши добавит
14.
Arab 07.04.2009 / 09:34
в чем разница между
mysql_escape_string и
mysql_real_escape_string ?
15.
Удаленный 07.04.2009 / 09:37
14,гьегеб реальный эскапе стринги,фирмач
16.
Санёк 07.04.2009 / 11:53
15, 2 функция учитывает кодировку.
17.
Дмитрий 07.04.2009 / 13:35
11) учту сразу) а то гг ***)
18.
AlkatraZ 07.04.2009 / 18:28
Уважаемые, не забывайте, что для каждой ситуации есть своя отдельная методика фильтрации.
Все зависит от того, что за данные (строка, число, двоичные данные) и что Вы с ними потом собираетесь делать.
---
Конечно можноь написать универсальный фильтр, подходящий для 80% случаев, но онт будет слишком громоздким.
Я лично, предпочитаю по другому.
19.
ктулху 07.04.2009 / 18:30
18, согласен с тобой. лучше всего фильтровать регулярками каждую переменную, под свой формат данных. ну и текст естественно тупо экранировать.
20.
AlkatraZ 07.04.2009 / 18:30
Для чисел, абсолютно надежно:
$var = intval($var);
или, если не хотите допускать отрицательных чисел (например для номера страниц)
$var = abs(intval($var));
21.
AlkatraZ 07.04.2009 / 18:34
#19 регулярки очень тормозят скрипт, потому их использование оправдано только в крайних случаях.
---
Продолжу...
Для строковых данных, при занесении в базу MySQL надежно работает mysql_real_escape_string()
Как правильно заметили выше, эта функция правильно обрабатывает многобайтовые кодировки (UTF8)
Ну и желательно вначале проверить, включено ли magic_quotes если да, то использовать strip_slashes()
22.
AlkatraZ 07.04.2009 / 18:36
Только учтите, что mysql_real_escape_string() избавляет от SQL инъекции при хранении данных в базе.
НО!!!
Не избавляет от XSS и прочих скриптовых уязвимостей.
Потому, если Вы потом данные выводите в браузер, то нужна дополнительная обработка
htmlspecialchars() или htmlentities()
23.
AlkatraZ 07.04.2009 / 18:38
Если переменная используется в системных нуждах, особенно как в Моторе, определяет файл подключаемого модуля и др, то там нужна дополнительная фильтрация, возможно даже регулярными выражениями (чтоб исключить опасные команды).
24.
Сергей 07.04.2009 / 18:51
21, смотря еще какие регулярки юзать, во многих случаях лучше юзать PERL (preg), но и иногда даже лучше и POSIX (ereg) (=
25.
Удаленный 07.04.2009 / 19:50
24. а разница?
26.
Сергей 07.04.2009 / 20:01
24, разница в скорости и в регулярных выражениях
где-то была статейка про увеличение скорости скрипта, вот там рассматривались регулярки (=
27.
Дэн 07.04.2009 / 20:38
Олег +1, особенно про числа - всегда именно модуль+интвал юзаю и большего просто ненужно
28.
Роман 07.04.2009 / 23:36
Вот альтернатива регулярки. Возвращает
true, если каждый символ в text является буквой либо цифрой.
<?php
. . .
if (ctype_alnum($text))
echo $text;
?>
29.
Иван 03.10.2009 / 14:23
Обьясните пожалуйста. Вот например я создаю файл conf.php и в нём прописываю переменные и их значения. потом эти переменные вставляю в страницы в нужном месте. Как правельно их отфильтровать, если переменные и символьное и цифровое значение имеют
30.
Neformat 03.10.2009 / 14:32
29, если в файл пишешь скриптом то
$var = intval($var); для цифровых значений
$var = htmlspecialchars(); для символьных
Но если ты вручную вписываешь в файл conf.php, а он потом инклудится везде - эти переменные фильтровать не нужно - они являются внутренними, а не приходят из вне.
31.
Иван 03.10.2009 / 14:55
30 спасибо
32.
Андрей 22.10.2009 / 04:13
Vot prjam iz skripta moego:
<?php
$name=mysql_real_escape_string(htmlspecialchars(stripslashes($_POST['name'])));
$name=str_replace("'","''",$name);
?>
33.
Александр 22.10.2009 / 04:33
Делаю все так же, как написал Алькатраз
34.
Protus 22.10.2009 / 07:55
function filter($text){
$text=str_replace('&','', $text);
$text=str_replace('$','', $text);
$text=str_replace('<','<', $text);
$text=str_replace('>','>', $text);
$text=str_replace('~','', $text);
$text=str_replace('`','', $text);
$text=str_replace('#','', $text);
$text=str_replace('*','', $text);
$text=str_replace('%','', $text);
return addslashes(trim(htmlspecialchars(stripslashes(chop($text)))));
}
Во как делаю, почти тоже самое.
35.
Михаил 22.10.2009 / 11:11
$text=str_replace('&','', $text);
$text=str_replace('$','', $text);
$text=str_replace('<','<', $text);
$text=str_replace('>','>', $text);
$text=str_replace('~','', $text);
$text=str_replace('`','', $text);
$text=str_replace('#','', $text);
$text=str_replace('*','', $text);
$text=str_replace('%','', $text);
а это для чего?
36.
HOOF 22.10.2009 / 11:31
34. Ты сначала добавляешь слэши, а потом удаляешь их...
chop() думаю тоже не к чему, достаточно trim()
+ желательно добавить mysql_real_escape_string()
37.
Михаил 22.10.2009 / 11:54
mysql_real_escape_string() тогда вместо addslashes() можно добавить
38.
Артём 24.10.2009 / 14:50
//Фильтрация цифр
function s1($str)
{
return abs((int)$str);
}
//Фильтрация текста
function s2($str)
{
global $MySQL;
$str = trim(htmlentities($str, ENT_QUOTES, 'UTF-8'));
if($MySQL) $str = mysql_real_escape_string($str);
return $str;
}
?>
39.
Михаил 24.10.2009 / 15:34
return abs((int)$str);
C какой целью abs тут используется?
40.
HOOF 24.10.2009 / 15:53
39. abs() модуль числа, т.е. только положительные числа.
38. У меня почти такая же функция для цифр. Ещё насколько я знаю
intval() быстрее
(int)
41.
Михаил 24.10.2009 / 16:04
#40, а зачем только положительные числа? Часто любые нужны
42.
HOOF 24.10.2009 / 16:07
Чтобы, например, не было глюка при MySQL запросе, типа хотел + (прибавить что то), а кто то написал -, и получилось что отнял. Мне например чаще положительные числа нужны...
43.
Артём 24.10.2009 / 23:17
40,вообще то наоборот ,быстрее (int) чем intval
44.
HOOF 25.10.2009 / 06:00
43. Блин точно, чё то я тупанул, ведь intval() - функция, а (int) - как бы конструкция...
45.
Сергей 25.10.2009 / 11:43
41, скорее реже, где ты так часто используешь отрицательные значения?
46.
Михаил 25.10.2009 / 22:24
#45, например в админке при добавлении разделов есть пункт "положение на странице". Если уже есть раздел с номером 1, то чтобы вставить раздел в самый верх пришлось бы сдвигать все. А так ставлю -1 и он показывается выше чем 1.
47.
inferno1392 25.10.2009 / 23:34
46, а хранить все в некой последовательности, в которой реализован метод вставки в начало не вариант? вообщем-то все же соглашусь, что чаще требуются именно положительные числа
48.
ion 28.10.2009 / 08:01
Ни один фильтр не помогает против этого ██████████████████████████████████████████████████████ всего таких выкидов! что сделать?
49.
ion 28.10.2009 / 08:02
в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€в–€ авот это выглядить в кодировке ANSI
50.
Артём 28.10.2009 / 20:22
48,регулярка есть
51.
ion 29.10.2009 / 10:48
Какая регулятка?
52.
Александр 03.11.2009 / 02:25
для string в бд:
function safe_sql ($query) {
if ($connect) {
return mysql_real_escape_string($query, $connect);
} else {
return mysql_escape_string($query);
}
}
для цифр, abs, intval, ctype_digit, is_int
Против XSS htmlspecialchars & others.
53.
Александр 03.11.2009 / 02:29
ion, пиши регулярку что бы пропускала токо то что тебе надо...
Только не делай как делают некоторые умники здесь... пишутрегулярку которая не пропускает указанные символы.Все там указать нельзя.В итоге получается говнокод, в принципе... большая, больше чем большая ))) часть скриптов здесь и есть говно, не только изза ^^ ))
54.
Михаил 03.11.2009 / 10:53
#48, против этого должен быть бан
55.
ion 04.11.2009 / 19:21
52. Всё это у меня стоит и проходит все на ура это фигня! Так что это ни куда не годится! Так что спасибо но не то!
56.
ramzes 04.11.2009 / 19:42
#48 iconv('windows-1251','utf-8',$text);
так попробуй, в потом проверяй и фильтруй.
preg_match('|^[a-z0-9\.\_\-]+$|iu',$text)
Например.
57.
ion 05.11.2009 / 05:14
48. Респект! Плюс один
58.
CROWS 05.11.2009 / 10:30
моя тема)))
59.
Славик 06.03.2010 / 15:57
Новая функция фильтрации реализована с 5/2php
http://webpeeps.ru/article/12/
60.
ramzes 06.03.2010 / 18:52
Там в проверке мыла баг говорили, можно в неверном формате подсунуть.
61.
ктулху 07.03.2010 / 00:29
60, там видов фильтров много... мыло можно дополнительно регулярочкой
62.
ramzes 07.03.2010 / 00:42
Я знаю что много

просто сообщил, что бы особенно не доверяли проверке мыла. Хотя в 5.3 вроде бы исправили, или даже раньше..
63.
coca-coca 07.03.2010 / 01:36
ion (28.10.09 / 08:01)
Ни один фильтр не помогает против этого ██████████████████████████████████████████████████████ всего таких выкидов! что сделать?
http://upwap.ru/775049
в этом архиве есть класс для работы с UTF-8, в нём же имеется метод is_utf8 или is_utf (не помню), он помогает избавиться от такой хренотени. Изучай.
64.
coca-coca 07.03.2010 / 01:45
PS тема про валидацию e-mail стара как яйца дедушки Ленина.
Я вообще пришёл для себя к "оптимальному" выводу, что лучше использовать список "доверенных" почтовых сервисов (типа yandex,mail,gmail,bmail). И не трахать свой мозг изобретением велосипедов на PCRE)
65.
Azzido 07.03.2010 / 10:28
Хм, даже не подозревал о существовании функции фильтрации в php
66.
Андрей 12.03.2010 / 21:57
А от XSS кроме htmlspecialchars, что еще прокатит?
67.
HOOF 13.03.2010 / 04:41
66. htmlentities ))
68.
Удаленный 13.03.2010 / 05:05
66#
strip_tags();
stripslashes() ;
69.
Azzido 14.03.2010 / 15:22
stripslashes обратные слэши вырежет,а от хss не поможет.
70.
Михаил 14.03.2010 / 22:22
Shaxter (12.03.10 / 21:57)
А от XSS кроме htmlspecialchars, что еще прокатит?
Этого достаточно
71.
Андрей 14.03.2010 / 23:08
Flyd (Сегодня / 22:22)
Этого достаточно
Я знаю, думал вместо него че нить есть... но уже не надо...
72.
SirkO 30.03.2010 / 23:46
function in ($t) {
return htmlentities(trim($t), ENT_QUOTES, 'UTF-8');
}
это для даных, которые в базу идут (посты на форуме и т.д.)
mysql_escape_string() для запросов
abs(intval($value)) - для числовых даных
и все....
73.
Azzido 31.03.2010 / 07:46
72, mysql_escape_string() пора заменить на mysql_real_escape_string() в связи с переходом на новые версии php а для чисел не нужно применять функции, достаточно объявления типа переменной и все (int)$value, вот что верно это использование htmlentities(trim($t), ENT_QUOTES, 'UTF-8') с указанием кодировки, это грамотно и актуально
74.
WCO 31.03.2010 / 11:20
function int();
function str();
// этого хватит
75.
SirkO 01.04.2010 / 21:54
73.
Azzido, спасибо, буду знать)
76.
Replikon 03.04.2010 / 02:15
Подскажите, при занесении записи в базу можно ли одной лишь addslashes () при выключенных магических кавычках защитить скрипт?
77.
Replikon 03.04.2010 / 10:45
Ау, тут есть кто-нибудь?
78.
Azzido 05.04.2010 / 06:51
76, этого вполне достаточно для простых запросов для защиты от инъекции, но лучше все таки mysql_real_escape_string(), но на теги тоже надо фильтровать
79.
chiper 14.04.2010 / 16:53
я mysql_real_escape_string() не использую. я перевожу кавычки в хтмл сущьность. типа того '
тоесть в запросе она уже не имеет никакой силы
80.
WCO 14.04.2010 / 17:31
^^ скул инъекции не тревожат?
81.
Neformat 16.04.2010 / 00:07
ChipеR (14.04.10 / 16:53)
я mysql_real_escape_string() не использую. я перевожу кавычки в хтмл сущьность. типа того '
тоесть в запросе она уже не имеет никакой силы
ну да, а без ковычки скл иньекцию теперь отменили...
82.
Neformat 16.04.2010 / 00:09
SirkO (30.03.10 / 23:46)
function in ($t) {
return htmlentities(trim($t), ENT_QUOTES, 'UTF-8');
}
Зачем стандартную функцию загонять в функцию? В чем экономия то... в количестве символов в имени функции что ли?
83.
Max 22.04.2010 / 09:18
Интересует, что происходит с переносами на сл.строку вида \r\n после обработки real-escape-string
84.
Azzido 22.04.2010 / 09:52
83.
BlаcKaXeS, они просто тупо экранируются бэкслэшами, и при выборке из базы так и останутся переносами
85.
Max 22.04.2010 / 11:19
Хм... это выходит мне при выводе информации надо применять \r\n -> <br/> ?
86.
Дмитрий 22.04.2010 / 16:51
да, и ещё от хсс обрабатывать на выводе (если конечно при записи ты это всё не делаешь)
87.
DmitryDick 23.04.2010 / 22:13
85, nl2br()
88.
Azzido 24.04.2010 / 11:15
87, к сожалению она заменяет только \n а \r никуда не девается и может быть воспринято как еще один перенос
89.
Михаил 24.04.2010 / 18:39
\r это не перенос, это символ возврата в начало строки
90.
Azzido 25.04.2010 / 14:51
Но если стоит один,без \n,после применения nl2br то расценивается как перенос
91.
ComatoZZZ 07.11.2010 / 01:30
Входящий текст в GET запросах не фильтрую.
92.
Владислав 07.11.2010 / 09:24
function protect($string) {
return mysql_real_escape_string(trim(htmlentities($string, ENT_QUOTES, 'UTF-8')));
}
function int($string) {
return abs((int)$string);
}
93.
KOZZ 07.11.2010 / 12:20
92, зачем htmlentities то там? и без него нормально будет
94.
Александр 07.11.2010 / 12:24
93, нормальная xss?
95.
KOZZ 07.11.2010 / 12:31
94, вывод через htmlspecialchars и все, никакой xss ты не сделаешь
96.
Александр 07.11.2010 / 13:03
95, выводя после тратишь лишнее процессорное время, если в тексте мало html лучше фильтровать в начале, жертвуя пару килобайтам места в бд.
97.
KOZZ 07.11.2010 / 13:13
96, так я имею ввиду фильтрацию при входе через mysql_real_escape_string() + вывод через htmlspecialchars()
а про экономию проц.времени - при нормальной структуре это экономия на спичках
98.
Azzido 07.11.2010 / 14:06
97.
eGo, все таки лучше использовать htmlentities а не htmspecialchars, избежишь большинства трабл с некоторыми браузерами
99.
KOZZ 07.11.2010 / 15:48
98, каких например проблем?
100.
Azzido 07.11.2010 / 16:18
99.
eGo, неотображение некоторых символов в ie6 и некоторых других браузерах, и не надо говорить что этими браузерами никто не пользуется, тысячи людей еще даже не подозревают что он уг и существуют и другие
101.
KOZZ 07.11.2010 / 17:30
100, ну я думаю это не так уж страшно, если не отобразится знак евро, или еще что нить в таком роде
102.
balalayka 18.07.2011 / 14:30
Народ, помогите
Нашел скрипт Ckeditor - это визуальный редактор
В общем их безапасность ввода данных я не нашел...
Как фильттровать данные, если этот редактор юзает теги, например <strong></strong> <span style="font:19px"></span> ну и т.д. т.п
URL:
https://visavi.net/topics/615