Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Функция эранирования "опасных" данных 
:(
    Опции темы
BASILIO
Дата 20.8.2008, 03:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Функция:
Код

function safe_string($str)
    {
    if (get_magic_quotes_gpc())
        {
        $str = stripslashes($str);
        }
    return htmlentities(strip_tags($str),ENT_QUOTES, 'UTF-8');
    }


Задуманный смысл:
1. иничножение всех хтмл тэгов
2. обезопасивание БД от пакостей

Ход мыслей:
1. htmlentities не захотел работать если кавычки за слэшем стоят, посему если надо убираем автоматические слэши
2. удоляем тэги хтмл`а
3. в остатки находим ковычки и заменяем их


Проблема:
Вроде бы всё правельно задаю, но одиночная ковычка всё равно проскакивает :(
PM   Вверх
krundetz
Дата 20.8.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Советую разделить функционал и избавляться от тегов уже непосредственно перед выводом в браузер.

Чтобы обезопасить базу данных в PHP есть встроеные функции экранирующие спецсимволы.

А маджик квотес лучше вообще отключить


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Feldmarschall
Дата 20.8.2008, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



1. слово кавычка пишется через "а"
2. кавычками "опасные для бд символы" не исчерпываются. 
3. для того, чтобы обезопасить данные для БД, есть специальная функция mysql_real_escape_string. применять недо её, а не шаманство с HTML сущностями.
4. Работа с текстом и работа с БД - это РАЗНЫЕ вещи. В базу может заносить данные и администратор сайта. Он может иметь право добавлять и html. ПОЭТОМУ никакой функции safe_string быть не может.
А может быть две функции
- функция обработки данных для запроса
- функция обработки небезопасных данных для вывода на экран.
PM   Вверх
BASILIO
Дата 20.8.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Цитата(krundetz @  20.8.2008,  08:40 Найти цитируемый пост)
избавляться от тегов уже непосредственно перед выводом в браузер.

Не имеет смысла держать в Базе данные, которые всё равно никто не увидет
Цитата(krundetz @  20.8.2008,  08:40 Найти цитируемый пост)
Чтобы обезопасить базу данных в PHP есть встроеные функции экранирующие спецсимволы.

Знаю, делают если не ошибаюсь с помощью "\", но потом их надо вырезать после получения данных обратно, чего хочется избежать, ибо в базу записываем один раз а выдаём большое количество раз
PM   Вверх
skyboy
Дата 20.8.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(BASILIO @  20.8.2008,  12:43 Найти цитируемый пост)
Знаю, делают если не ошибаюсь с помощью "\"

ошибаешься. ещё и посты предыдущие не читаешь. делается это(если мы говорим про mysql) при помощи функции mysql_real_escape_string. после выборки из базы ничего "вырезать" не надо. 
Цитата(BASILIO @  20.8.2008,  12:43 Найти цитируемый пост)
Не имеет смысла держать в Базе данные, которые всё равно никто не увидет

ога. конечно. написал человек "1< 2", а ты так о-па и выбросил "<" во время работы  strip_tags. разумно-разумно... а если использовать htmlspecialchars - так вообще - все, что ввел пользователь и отображаться будет. 
PM MAIL   Вверх
krundetz
Дата 20.8.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



BASILIO, смысл как раз в том чтобы выести на экран все что ввел пользователь но не в виде HTML тегов а в виде обычного текста где теги будут заменены на соответсвующие им коды символов. Ч то вы будете делать если пользователь желает с кемто поделиться своим HTML кодом а вы у него взяли да и вырезали все теги?


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Feldmarschall
Дата 20.8.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



krundetz, в этом случае человек поделится не кодом, а его представлением =)
вообще, проблема "резать или заменять", на мой взгляд, не нуждается в столь острых дискуссиях. вполне можно оставить решение на выбор разработчика.
куда более важной мне предтавляется проблема осмысленности копипастных действий, который совершает этот юный талант. Но здесь другая проблема - решение пока не найдено...
PM   Вверх
lukas
Дата 20.8.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Советую автору топика прочитать пару статей почему нужно использовать mysql_real_escape_string, и как без вообще происходят SQL иньекции... а не тупо копировать способы обезопасить скрипт... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Anarki
Дата 20.8.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 7
Всего: 11





--------------------
PM WWW   Вверх
BASILIO
Дата 21.8.2008, 04:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Цитата(skyboy @  20.8.2008,  14:47 Найти цитируемый пост)
ошибаешься. ещё и посты предыдущие не читаешь. делается это(если мы говорим про mysql) при помощи функции mysql_real_escape_string. после выборки из базы ничего "вырезать" не надо. 

Цитата(http://de2.php.net/manual/ru/function.mysql-real-escape-string.php)

mysql_real_escape_string() вызывает библиотечную функцмю MySQL mysql_real_escape_string, которая добавляет обратную косую черту к следующим символам: \x00, \n, \r, \, ', " and \x1a.

Обратная черта, сама изчезает?
Да, игнорирую хамские посты.

Цитата(skyboy @  20.8.2008,  14:47 Найти цитируемый пост)
ога. конечно. написал человек "1< 2", а ты так о-па и выбросил "<" во время работы  strip_tags. разумно-разумно...

Цитата(http://de2.php.net/manual/ru/function.strip-tags.php)

Эта функция возвращает строку str , из которой удалены HTML и PHP тэги.

Функция немного умней, и удоляет ТОЛьКО тэги, не трогая не чего другово

Цитата(skyboy @  20.8.2008,  14:47 Найти цитируемый пост)
а если использовать htmlspecialchars - так вообще - все, что ввел пользователь и отображаться будет.  

Мне не надо этого, на сайте ясно сказано, тэги не юзать, кто вписывает, тот сам виноват.


Цитата(krundetz @  20.8.2008,  15:23 Найти цитируемый пост)
BASILIO, смысл как раз в том чтобы выести на экран все что ввел пользователь но не в виде HTML тегов а в виде обычного текста где теги будут заменены на соответсвующие им коды символов. Ч то вы будете делать если пользователь желает с кемто поделиться своим HTML кодом а вы у него взяли да и вырезали все теги? 

Ресурс у меня немного другово плана, там не кто не должен делится ХТМЛ кодами через него ;)


Цитата(lukas @  20.8.2008,  19:36 Найти цитируемый пост)
Советую автору топика прочитать пару статей почему нужно использовать mysql_real_escape_string

Цитата(http://de2.php.net/manual/ru/function.mysql-real-escape-string.php)

mysql_real_escape_string() вызывает библиотечную функцмю MySQL mysql_real_escape_string, которая добавляет обратную косую черту к следующим символам: \x00, \n, \r, \, ', " and \x1a.

Мне не нужны некакие добовления лишние, мне надо чтоб всё лишние превратилось в код, который не опасен для БД, но виден браузеру как нормальные символы

Цитата(lukas @  20.8.2008,  19:36 Найти цитируемый пост)
а не тупо копировать способы обезопасить скрипт...  

В гугле искали? Удевлюсь если что-то нашли, ибо скрипт мой.
PM   Вверх
BASILIO
Дата 21.8.2008, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Цитата(Anarki @  20.8.2008,  22:17 Найти цитируемый пост)
Ну и вдогонку 

Спасибо, полезная статья
PM   Вверх
BASILIO
Дата 21.8.2008, 05:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Цитата(Anarki @ 20.8.2008,  22:17)
Ну и вдогонку

Дочитал до конца статью.... мои выводы:
1. забирая вариаблу из $_REQEUST применять сходу:
Код

function safe_string($str)
    {
    if (get_magic_quotes_gpc())
        {
        $str = stripslashes($str);
        }
    return strip_tags($str);
    }

strip_tags
2. в запросах MYSQL добовлять "mysql-real-escape-string($str)".
3. Перед передачи данных в браузер делать "htmlentities($str)".
PM   Вверх
Feldmarschall
Дата 21.8.2008, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Я считаю, что топикстартер хамит отвечающим. 
Игнорируя полезную информацию, и выставляя напоказ воинствующее невежество.
Плюс клевета, что ему, якобы, пишут хамские посты.

Я считаю, что не должно быть перекоса в отношении к посетителям, типа "новичков надо облизывать - пусть несут любую чушь, а опытных можо пинать, они потерпят". Я считаю, что отношение должно быть равное ко всем.

Что вообще тут творится? 10 профи вокруг него бегают, уговаривают, а он кобенится - "это я делать не буду, то мне не нравится, а здесь я выковырял из носа гениальное умозаключение, и все ваши слова мне до нижней планки!"


PM   Вверх
Mal Hack
Дата 21.8.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



BASILIO, все директивы связанные с magic_quotes_gpc отключать надо на уровне php.ini и .htaccess.
Это первое. Второе. Для экранирования символов при вставке данных в БД надо использовать специфические функции для этой БД, в частности для mySQL - mysql_real_escape_string.
Удаляться из строки после такой операции ничего не будет, но строка будет экранирована и на 99% безопасна в использовании в запросе.

Цитата(BASILIO @  21.8.2008,  05:23 Найти цитируемый пост)
Мне не нужны некакие добовления лишние, мне надо чтоб всё лишние превратилось в код, который не опасен для БД, но виден браузеру как нормальные символы

Экранирование и организация безопасности в данном вопросе как раз НАДО организовывать так, как вы не хотите.
В основе технологии программирования, в качестве, не то, чтобы основных, но тем не менее важных правил - данные должны храниться СЫРЫМИ, так называемые (raw data). Оставляю скидку на то, что иногда это просто не нужно...
PM ICQ   Вверх
BASILIO
Дата 21.8.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Цитата(Mal Hack @  21.8.2008,  11:20 Найти цитируемый пост)
все директивы связанные с magic_quotes_gpc отключать надо на уровне php.ini и .htaccess.

Пробывал, закончилось "500 Internal Error" =(
Цитата(Mal Hack @  21.8.2008,  11:20 Найти цитируемый пост)
Экранирование и организация безопасности в данном вопросе как раз НАДО организовывать так, как вы не хотите.

Прочитав линк Anarki решил здеать так:
Код

function safe_input($str)
    {
    if (get_magic_quotes_gpc())
        {
        $str = stripslashes($str);
        }
    return strip_tags($str);
    }

function safe_dbstring($str)
    {
    return mysql_real_escape_string($str);
    }

function safe_output($str)
    {
    return htmlentities($str,ENT_QUOTES, 'UTF-8');
    }


Применяю в таком порядке:
Код

$mailtext = safe_input($_REQUEST['mailtext']);
mqq("INSERT INTO internmail VALUES ('".safe_dbstring($mailtext)."')");
echo safe_output(nl2br($line[mailtext]));

PM   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1053 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.