За последние 24 часа нас посетили 61989 программистов и 1677 роботов. Сейчас ищут 898 программистов ...

Безопастность и htmlspecialchars($text)

Тема в разделе "Прочие вопросы по PHP", создана пользователем pioner7, 8 апр 2009.

Статус темы:
Закрыта.
  1. pioner7

    pioner7 Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    54
    Симпатии:
    0
    Вот головую ломаю надо ли тект обрабатывать функций htmlspecialchars($text) перед сохранением в базу или не стоит?
    Это же кто то может в текст вставить ссылку на какой нибудь внешний файл который будет грузиться пользователю.
    Как вы поступаете в это случаи?
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Обрабатываем текст функцией htmlspecialchars непосредственно перед отображением данных.
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Sergey89
    но если там бб коды регулярки и пр. перед
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    От задачи зависит. Мне лично в БД не нужен лишний мусор от пользователей :)
    PHP:
    1.  
    2. <?php
    3. if (!$User->isAdmin()){
    4.    $Comments = $Text->FormatUserInput ($Comments);
    5. }
    6.  
    Как-то так :)
     
  5. Jensi

    Jensi Активный пользователь

    С нами с:
    9 апр 2009
    Сообщения:
    299
    Симпатии:
    0
    Не знаю,я обрабатываю пока htmlspecialchars и addslashes
     
  6. kostyl

    kostyl Guest

    а как насчет htmlentities() ?
     
  7. Jensi

    Jensi Активный пользователь

    С нами с:
    9 апр 2009
    Сообщения:
    299
    Симпатии:
    0
    Собственно, зачем такое делать: ( разве что, только для записи в файлы)

    PHP:
    1.  
    2. <?php
    3. $str = "A 'quote' is <b>bold</b>";
    4. echo htmlentities($str);  // выводит: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
    5. echo htmlentities($str, ENT_QUOTES);  // выводит: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
    6. ?>
    7.  
    Почитайте пжт мануалы немного:)

    p.s.: скрипт взял с и-нета
     
  8. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    За версию Sergey89. Потому что "а вдруг чё"? Если обрабатывается долго всегда можно кэшировать.
     
  9. pioner7

    pioner7 Активный пользователь

    С нами с:
    28 ноя 2007
    Сообщения:
    54
    Симпатии:
    0
    а ты не обращаешь внимание на нагрузку на сервер? если обрабатывать перед сохранением в базу то эта функция вызывается один раз, а если перед выводом, то это может быть тысячи вызовов или я сильно драматизирую :)
     
  10. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    ты сильно драматизируешь
     
  11. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Наиглупеший подход. Все данные, приходящие из вне, должны проходить валидацию на входе.
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Amian
    не все и не всегда
     
  13. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Причём тут валидация и htmlspecialchars ?
     
  14. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Ищо один "специалист"?

    Ну а ты подумай внимательно, что из себя представляют валидные данные.
     
  15. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Валидные данные это данные которые прошли валидацию. Причём здесь htmlspecialchars я не понимаю.
     
  16. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    А если валидация написана коряво, то будут ли они валидными , пройдя её ? Формально - да, а фактически ?

    В моём понимании валидные данные это внешние данные, отвечающие всем поставленным требованиям, после прохождения всевозможных проверок, делающих их безопасными для дальнейшего использования в системе.
     
  17. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Amian, в твоём понимании слоники могут спариваться с морскими свинками потому что и те и другие продолговатые. Нам-то что с того?

    Валидные данные, чмо ты резкое, это когда данные надёжны и действительны. В админке поле textarea может быть валидным просто потому что не является пустым. Комментарий к посту может быть валидным даже если содержит html.

    Безопасными должны их делать пост обработчики. А если у тебя руки из жопы и мозг там же, ну, можно и так. Мама тебя не разлюбит. Только аргументы твои никто всерьёз не примет, даже твоя мама.
     
  18. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    lexa, нежнее, ещё нежнее…

    Amian, ну, не могут данные быть опасными или безопасными. Следуя твоему определению, я никогда не смогу воспользоваться логином вида <script>alert('Luge');</script>, хотя, основываясь на общечеловеческой логике, ничто, казалось бы, не мешает. Но твой htmlspecialchars просто создаст запись искажающую введённые мной данные. И залогиниться просто не получится. В то же время остальные смогут видеть на странице пользователей мой юзернэйм таким, как я его вводил. А это уже недоработка, бага, если хочешь.

    Опять же, только что я написал код, который должен скукожить всю станицу, но он этого что-то не делает.

    не путай, пожалуйста, понятия «безопасного вывода» и «минимально-достаточных условий для работы системы»
     
  19. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Быдлокодерам, действительно, с этого ничего не будет. Может организуете клуб по интересам?

    Не спорю, а где я писал другое? Я написал, что валидация должна происходить на входе, а не перед выводом данных в уровень представления. И дал определение, что по сути является валидацией. Ищо вопросы, мой юный поддаван?
    Мне по сути насрать как ты, lexa, называешь валидатор внешних данных - "пост обработчиками", "гет обработчиками" или "рекуест обработчиками".

    Где я написал, что htmlspecialchars() нужно всегда использовать? Было написано, что если вдальнейшем подразумевается использовать htmlspecialchars() перед выводом данных в уровень представления, то это наиглупейший подход. Делать это надо перед тем, как данные попадут в систему.
     
  20. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Данные не могут быть опасными. Сегодня ты выводишь данные в HTML, завтра захочешь в PDF, а послезавтра решишь в консоле показывать. htmlspecialchars это даже не фильтрация, это постобработка данных.
     
  21. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Sergey89
    +1


    Не понимаю о чём спор.
     
  22. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Спорить на эту тему, в отрыве от конкретного случая бессмысленно, можно привести аргументы и в ту и другую сторону.

    Пожалуй пока все не переругались тему стоит закрыть. Аминь.
     
Статус темы:
Закрыта.