| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Функция эранирования "опасных" данных |
| Автор: BASILIO 20.8.2008, 03:57 | ||
Функция:
Задуманный смысл: 1. иничножение всех хтмл тэгов 2. обезопасивание БД от пакостей Ход мыслей: 1. htmlentities не захотел работать если кавычки за слэшем стоят, посему если надо убираем автоматические слэши 2. удоляем тэги хтмл`а 3. в остатки находим ковычки и заменяем их Проблема: Вроде бы всё правельно задаю, но одиночная ковычка всё равно проскакивает :( |
| Автор: krundetz 20.8.2008, 08:40 |
| Советую разделить функционал и избавляться от тегов уже непосредственно перед выводом в браузер. Чтобы обезопасить базу данных в PHP есть встроеные функции экранирующие спецсимволы. А маджик квотес лучше вообще отключить |
| Автор: Feldmarschall 20.8.2008, 09:43 |
| 1. слово кавычка пишется через "а" 2. кавычками "опасные для бд символы" не исчерпываются. 3. для того, чтобы обезопасить данные для БД, есть специальная функция mysql_real_escape_string. применять недо её, а не шаманство с HTML сущностями. 4. Работа с текстом и работа с БД - это РАЗНЫЕ вещи. В базу может заносить данные и администратор сайта. Он может иметь право добавлять и html. ПОЭТОМУ никакой функции safe_string быть не может. А может быть две функции - функция обработки данных для запроса - функция обработки небезопасных данных для вывода на экран. |
| Автор: skyboy 20.8.2008, 14:47 | ||
ошибаешься. ещё и посты предыдущие не читаешь. делается это(если мы говорим про mysql) при помощи функции mysql_real_escape_string. после выборки из базы ничего "вырезать" не надо.
ога. конечно. написал человек "1< 2", а ты так о-па и выбросил "<" во время работы strip_tags. разумно-разумно... а если использовать htmlspecialchars - так вообще - все, что ввел пользователь и отображаться будет. |
| Автор: krundetz 20.8.2008, 15:23 |
| BASILIO, смысл как раз в том чтобы выести на экран все что ввел пользователь но не в виде HTML тегов а в виде обычного текста где теги будут заменены на соответсвующие им коды символов. Ч то вы будете делать если пользователь желает с кемто поделиться своим HTML кодом а вы у него взяли да и вырезали все теги? |
| Автор: Feldmarschall 20.8.2008, 15:34 |
| krundetz, в этом случае человек поделится не кодом, а его представлением =) вообще, проблема "резать или заменять", на мой взгляд, не нуждается в столь острых дискуссиях. вполне можно оставить решение на выбор разработчика. куда более важной мне предтавляется проблема осмысленности копипастных действий, который совершает этот юный талант. Но здесь другая проблема - решение пока не найдено... |
| Автор: lukas 20.8.2008, 19:36 |
| Советую автору топика прочитать пару статей почему нужно использовать mysql_real_escape_string, и как без вообще происходят SQL иньекции... а не тупо копировать способы обезопасить скрипт... |
| Автор: Anarki 20.8.2008, 22:17 |
| http://phpfaq.ru/slashes |
| Автор: BASILIO 21.8.2008, 04:23 | ||||||||||||||||
Обратная черта, сама изчезает? Да, игнорирую хамские посты.
Функция немного умней, и удоляет ТОЛьКО тэги, не трогая не чего другово
Мне не надо этого, на сайте ясно сказано, тэги не юзать, кто вписывает, тот сам виноват.
Ресурс у меня немного другово плана, там не кто не должен делится ХТМЛ кодами через него ;)
Мне не нужны некакие добовления лишние, мне надо чтоб всё лишние превратилось в код, который не опасен для БД, но виден браузеру как нормальные символы В гугле искали? Удевлюсь если что-то нашли, ибо скрипт мой. |
| Автор: BASILIO 21.8.2008, 04:59 |
Спасибо, полезная статья |
| Автор: BASILIO 21.8.2008, 05:16 | ||||
Дочитал до конца статью.... мои выводы: 1. забирая вариаблу из $_REQEUST применять сходу:
strip_tags 2. в запросах MYSQL добовлять "mysql-real-escape-string($str)". 3. Перед передачи данных в браузер делать "htmlentities($str)". |
| Автор: Feldmarschall 21.8.2008, 08:54 |
| Я считаю, что топикстартер хамит отвечающим. Игнорируя полезную информацию, и выставляя напоказ воинствующее невежество. Плюс клевета, что ему, якобы, пишут хамские посты. Я считаю, что не должно быть перекоса в отношении к посетителям, типа "новичков надо облизывать - пусть несут любую чушь, а опытных можо пинать, они потерпят". Я считаю, что отношение должно быть равное ко всем. Что вообще тут творится? 10 профи вокруг него бегают, уговаривают, а он кобенится - "это я делать не буду, то мне не нравится, а здесь я выковырял из носа гениальное умозаключение, и все ваши слова мне до нижней планки!" |
| Автор: Mal Hack 21.8.2008, 11:20 | ||
| BASILIO, все директивы связанные с magic_quotes_gpc отключать надо на уровне php.ini и .htaccess. Это первое. Второе. Для экранирования символов при вставке данных в БД надо использовать специфические функции для этой БД, в частности для mySQL - mysql_real_escape_string. Удаляться из строки после такой операции ничего не будет, но строка будет экранирована и на 99% безопасна в использовании в запросе.
Экранирование и организация безопасности в данном вопросе как раз НАДО организовывать так, как вы не хотите. В основе технологии программирования, в качестве, не то, чтобы основных, но тем не менее важных правил - данные должны храниться СЫРЫМИ, так называемые (raw data). Оставляю скидку на то, что иногда это просто не нужно... |
| Автор: BASILIO 21.8.2008, 16:37 | ||||||||
Пробывал, закончилось "500 Internal Error" =(
Прочитав линк Anarki решил здеать так:
Применяю в таком порядке:
|
| Автор: HackMan 21.8.2008, 17:06 | ||||
Теперь про magic_qoutes. Наверное что-то не так прописываешь в .htaccess. Вообще magic_quotes - это зло. Но если хостер не даёт тебе отключать эти кавычки, то срочно меняй хостера в принципе есть такой хак:
|
| Автор: Mal Hack 21.8.2008, 18:45 | ||
От сюда же не следует то, что этого сделать нельзя. Значит вы что-то делаете не так. А что - без кода сказать нельзя. Это в корне не правильный подхд с точки зрения технологии.
А чего там не давать-то? Доступ к .htaccess есть всегда, директивы эти могут там конфигурироваться. А Хак - это лишь частичный обход проблемы, а не ее решение. |
| Автор: BASILIO 21.8.2008, 18:51 | ||
Согласен, безспорно, мне просто лень писать текст, длинный, да ещё если ошибку допущу, посему скажемс так "слегка переименовал" ;) Хотя с другой стороны, если прейдётся меня БД, то не надо будет весь проект переворошивать, хватить только тута подправить ;)
Да нет, с нескольких страниц уже брал один и тот же текст, хостер не даёт 100%, я бы его сменил, но хостинг это не моя деректива, этим занимается другой человек, и платит за него тоже другой человек. Хак этот чо-то очень не охота использовать, ибо мне не надо творить такое со всеми вариаблами, будет лишния нагрузка =) Ну а в общем, подведём итог, такое использование правельное? |
| Автор: Sannis 21.8.2008, 20:31 | ||||
В таком случае обычно используют готовые фреймворки/библиотеки. Тем более, что если прийдётся менять БД с вашим кодом, то прийдётся всё равно править как созданные для очистки функции, так и названия функций, производящих запрос(mysql_query).
Думаю у вас очень слабое представление о том, что создаёт нагрузку. Лучше забудьте эту мысль пока с ними не сталкнётесь. Имхо Feldmarshall и Mal Hack всё сказали. Осталось только ещё раз перечитать их посты, запомнить и усвоить. |
| Автор: Feldmarschall 22.8.2008, 09:03 |
| попросите, кто-нибудь, автора объяснить смысл функции safe_output мне зело любопытно, что именно она делает safe |
| Автор: skyboy 22.8.2008, 13:41 | ||
|