За последние 24 часа нас посетили 17696 программистов и 1717 роботов. Сейчас ищут 874 программиста ...

Знающие люди, помогите понять о защите от HTML ломки

Тема в разделе "PHP для новичков", создана пользователем A.B.C., 8 ноя 2010.

  1. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    Здравствуйте, объясните плиз такую вот вещь. Пришедшую инфу от юзера (POSTом) по всем правилам нужно, как минимум пропустить через htmlspecialchars. Для того, что исключить HTML теги, однако существуют еще [bb] теги, когда POSTом стараются отправить ява скрипты и т.д.

    Однако, все они так или иначе привязаны к:
    <>{}[], почему нельзя просто сделать
    PHP:
    1.  ereg_replace("[<>\]\[\{\}]","",$_Post['name'])
    Чтоб исключить формирование этих тегов и запуск их браузером? Даже для БД существование двойных кавычек или одинарных, или знаков !$*"|/\ бесполезно если стоит "'".mysql_real_escape_string($_POST['name'])."'"

    Или я что то недопонимаю???[/php][/code]
     
  2. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    например, юзер отправляет в текстовом поле следующее:

    $str = 'аываыаыуа23424 " <script> dsdwd [ b]dada[ /b]$#%#d ddd...';//здесь $str - переменная из POST взята

    Допустим, тебе надо этот текст выводить потом гдето, например, это комментарий. Проблема в том, что там есть и бб-коды, которые нужно при выводе заменять. Делаем следующее:


    //здесь $str - переменная, взятая уже из базы. То есть выводим сохраненный текст
    $str = htmlspecialchars(stripslashes($str));//все теги не работают уже, но бб - сохранены
    затем регуляркой меняем все [ b][ /b] на <strong></strong>;
    выводим через обычное echo $str;
    в итоге - на экран будут выведены те "злобные" теги, но они не будут работать (видно будет что ктото хотел навредить), но обычные бб - отработаются.

    Но перед вставкой в базу в любом случае юзай mysql_real_escape_string, святую воду, осиный кол и чеснок.
     
  3. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    Апельсин
    Спасибо,
    , а почему не заменить [] и <> на "" - пустое место. Если это например страничка регистрации, там ни bb ни HTML код ...ненужен...
     
  4. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    A.B.C.
    тогда strip_tags
     
  5. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    смотря какое поле и какие задачи. можно перед вставкой вырезать все теги <>, тогда текст будет уже "безопасным", при выводе из базы. бб-теги вырезать незачем в принципе, это обычный текст, если его специально не обрабатывать (регулярками).
    Например, нужно вырезать тупо все лишнее - юзай stripslashes() -> strip_tags() -> mysql_real_escape_string -> echo $text на выходе
    если бб будешь обрабатывать, значит strip_tags() - юзаешь по желанию, но если без него нужно юзать htmlspecialchars() и обрабатывать сами бб-теги.
    разница в том, что при strip_tags() в тексте у тебя вообще не будет, например, тегов <script>, ф-я вырезает их. А при htmlspecialchars() - оставляет, просто заменяет опасные символы (<>, например) на их сущности (код символов) и этим делает их нерабочими, но выводятся на экран.
     
  6. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    Ensiferum
    ...еще надо удалять :) остановлюсь все же на ereg_replase() пусть останутся куски неработающие без скобок, пусть знают мощь регулярки враги!

    :)
    спасибо...
     
  7. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    поповский подход.
     
  8. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    Апельсин
    Спасибо....разобрался..
     
  9. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    в PHP 5.3 от ereg отказались. Используй preg