Автор Тема: Как данные пришедшие от пользователя почистить?  (Прочитано 7984 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Что лучше сделать с данными пришедшими от пользователя для занесения, например в БД?
Ну там, напр.,

$user_data
=trim($user_data);
$user_data=str_replace("\\t"" "$user_data);
$user_data=str_replace("\\r",""$user_data);
$user_data=preg_replace("/  +/"," "$user_data);//2- пробела => на 1
$user_data=stripslashes($user_data);

А ещё что мона сделать?
Я ещё такое встречал:

// доп. функция для удаления опасных сиволов
function pregtrim($str) {
   return preg_replace("/[^\\x20-\\xFF]/","",@strval($str));
}

Что эт ещё за опасные символы.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
ИМХО самое главное - это addslashes();
А остальное зависит от типа данных и того что с ними будут делать.
С текстом я обычно так поступаю:
$text = addslashes(strip_tags(trim(substr($text,0 , 255))));
По желанию можно еще wordwrap() добавить. Еще в определенных случаях либо  preg_replace() удалять символы которые считаешь не нужными.

Еще вариант - делать проверку данных и выводить ошибки пользователю:
if (empty($text)) {
$error = "text is empty";
} elseif (preg_match("/[^A-Za-z0-9_]/",$text)) {
$error = "Bad symbols";
} ....
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Цитировать
ИМХО самое главное - это addslashes();

А нахрена слэшнутые данные в базе хранить?
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Stek

  • Обожатель PHP
  • Ветеран
  • *****
  • Сообщений: 532
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.phpdevs.com
если пхп автоматом не слешит - то использовать stripslashes, иначе он нафиг не нужен.
Для переменных типа текст неплохо еще trim() использовать.
Для чисел intval()

Переменные желательно принимать непосредственно  из нужного массива, например $HTTP_POST_VARS

И вообще лучше обработать директорию через .htaccess со строками
Цитировать
php_flag magic_quotes_gpc on
php_flag register_globals off
PHP без башни - сделай свою жизнь разнообразнее.
Разбираю скрипты, собираю заново, вытираю пыль с баз данных.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Цитировать
если пхп автоматом не слешит - то использовать stripslashes

stripslashes - Вродь убирает слэши.
Цитировать
php_flag magic_quotes_gpc on
php_flag register_globals off
А эт у мя уж есть.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
А нахрена слэшнутые данные в базе хранить?

читай про SQL-injections
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
короче, горячие эстонские парни.
if(get_magic_quotes_gpc()) addslashes($data);

Макс, персонально для тебя. Никаких оправданий хранению слешнутых данных нет и быть не может. Хранить надо данные как есть. Поэтому слешить ТОЛЬКО один раз. Больше - портить, меньше - гадить.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
RomikChef
Цитировать
Хранить надо данные как есть. Поэтому слешить ТОЛЬКО один раз.
Непонял, хранить как есть или все-таки слешить один раз?

Цитировать
Никаких оправданий хранению слешнутых данных нет и быть не может.
Блин, я тут себя начинаю полным идиотом чувствовать. Данные слешить нужно (согласен, один раз - про большее я и не говорил).
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Stek

  • Обожатель PHP
  • Ветеран
  • *****
  • Сообщений: 532
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.phpdevs.com
Цитировать
stripslashes - Вродь убирает слэши

Блин, вернее наоборот, добавлять слеши. Думал одно, а  написал другое :)
PHP без башни - сделай свою жизнь разнообразнее.
Разбираю скрипты, собираю заново, вытираю пыль с баз данных.

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
А нахрена слэшнутые данные в базе хранить?

Чтобы тебя не "поломали", а то кто-нибудь впишит в переменную свой код на ПХП и тогда...
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн Дмитрий Попов

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 264
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.programmist.spb.ru
Tronyx
Только код не на PHP впишет, а на SQL... Не путайте...
 За Родину! За Россию!
SendMail для любого хостинга.

Оффлайн Stek

  • Обожатель PHP
  • Ветеран
  • *****
  • Сообщений: 532
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.phpdevs.com
Цитировать
Чтобы тебя не "поломали", а то кто-нибудь впишит в переменную свой код на ПХП и тогда

И объясни мне, каким образом меня так поломают ?
PHP без башни - сделай свою жизнь разнообразнее.
Разбираю скрипты, собираю заново, вытираю пыль с баз данных.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Цитировать
читай про SQL-injections

Да, интересная статейка.
Но мона ведь всё-таки не слэшить данные, а напр. так

$user_data
=str_replace("\'", \'"\', $user_data);//1-ную ковычку на 2-ю
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Stek

  • Обожатель PHP
  • Ветеран
  • *****
  • Сообщений: 532
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.phpdevs.com
Alexandr
Ну вот скажем запрос у меня


<?php
$name
=$HTTP_POST_VARS[\'name\'];
$SQL="SELECT * FROM table WHERE name=\'".$name."\'";
?>


Покажи мне на примере, как меня могут поломать !
PHP без башни - сделай свою жизнь разнообразнее.
Разбираю скрипты, собираю заново, вытираю пыль с баз данных.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Во-первых, слово кАвычка пишется через "а".
Я бы не обращал внимания если бы эта ошибка на стала разражающе распростаненной, как "извЕните".

Во-вторых, Саша, тебя никто не учил уважению к чужой информации?
Как будет смотреться фамилия Д"Артаньян?
Или JS код, в котором заменят одинарную на двойную?
Да и вообще - ЗАЧЕМ что-то менять, если есть стандартная функция защиты? ТЕМ БОЛЕЕ, что одинарной кавычкой набор спецсимволов не ограничивается. В общем, дурацкая идея.

Специально для тебя ремарка. Я не наезжаю на тебя лично. Я вообще против тебя ничего не имею. Но не считаю себя обязанным промолчать только потому, что у тебя ко мне неадекватное отношение и скорее всего мой ответ вызовет флейм.

Кстати, а ошибку у меня никто не заметил :-)
Конечно же
if(!get_magic_quotes_gpc()) addslashes($data);

Макс, если сделать addslashes, то данные ХРАНЯТСЯ как есть. ;-)
Троникс, хранить - действительно - совершенно не обязательно, и наоборот - вредно. А вот при составлении SQL запроса экранировать спецсимволы - ОБЯЗАТЕЛЬНО. Иначе может возникнуть как непреднамеренная ошибка, так и эти пресловутые инжекции.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28