Ваши ф-ции для фильтрации данных.

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

2. HOOF (06.04.2009 / 19:23)
ещё некоторые знаки фильтрую smile и т.п.

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,гьегеб реальный эскапе стринги,фирмач D

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("'","&apos;'",$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. Ты сначала добавляешь слэши, а потом удаляешь их... smile
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) - как бы конструкция... smile

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)
Я знаю что многоsmile просто сообщил, что бы особенно не доверяли проверке мыла. Хотя в 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 smile

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, ну я думаю это не так уж страшно, если не отобразится знак евро, или еще что нить в таком роде smile

102. balalayka (18.07.2011 / 14:30)
Народ, помогите
Нашел скрипт Ckeditor - это визуальный редактор
В общем их безапасность ввода данных я не нашел...
Как фильттровать данные, если этот редактор юзает теги, например <strong></strong> <span style="font:19px"></span> ну и т.д. т.п

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