Как защитить поле комментариев от вставки ява скриптов внутри тега типа onClick

Тема в разделе "PHP", создана пользователем dandandan, 4 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    267
    Использую WYSIWYG редактор кода (не BBcode)
    Как защитить сайт от такой штуки

    Код:
    <STRONG onclick="alert('13');">gfsgfdgfsgfd</STRONG>
    
    Т.е. надо внутри тега оставить тольк <STRONG>. Соответственно и в других тегах тоже самое почистить. Может есть еще какие-то скрытые места о которых я не знаю при использовании WYSIWYG редакторов? Буду рад прочитать.
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Есть. Визуальные редакторы в принципе слишком много на себя берут, добавляют лишние ненужные теги и стили. А чистить можно регулярными выражениями перед добавлении в базу данных.
     
  3. betatest

    betatest

    Регистр.:
    3 дек 2007
    Сообщения:
    517
    Симпатии:
    127
    можно сделать перевод всего текстового блока хтмлспешиалчарс
    после чего по шаблонам заменить тэги на нужные, тогда ВСЕ нестандартные конструкции перестанут работать и будут отображаться просто в виде текста
    (делал такую обработку на форуме недавно - пока проблем больше не обнаружено)
     
  4. DrCanibal

    DrCanibal Писатель

    Регистр.:
    10 апр 2007
    Сообщения:
    8
    Симпатии:
    4
    А каким редактором пользуетесь? возможно это проблему можно решить на уровне редактора...
    В противном случае фильтровать данные перед сохранением и отсекать всё лишнее с помощью регулярных выражений, но для этого нужно точно определить все "лишние" моменты
    Или же можно фильтровать с помощью предустановленных шаблонов, как уже сказал betatest - такой вариант может получиться более универсальным.
    Тут скорее нужно копать под конкретные WYSIWYG редакторы, потому что у всех свои "заморочки"...
     
  5. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    267
    Если имеете ввиду защиту на уровне java-script, то ломается это токо так.

    Пользуюсь (точнее выбрал) nicEdit. С возможность по клику показывать сразу готовый код или показывать страницу с тегами.

    NicEdit - WYSIWYG Content Editor, Inline Rich Text Application



    P.s. по идее должны же быть уже какие-то готовые решения для таких случаев.
     
  6. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    какой смысл их вырезать? Если такое появилось, то явно пишется не нормальный текст, а спам. Нужно делать поиск по ключевым словам onclick= и подобным и просто запрещать к постингу.
     
  7. whitewolff

    whitewolff Лимонадный Джо :)

    Регистр.:
    29 май 2007
    Сообщения:
    168
    Симпатии:
    33
    могут же необязательно ява-скрипт на онклик повесить. имхо правильнее было бы проверять пост на наличее в параметрах тегов ява-скрипта и ссылок на ява-скрипт, которые можно много куда засунуть. и либо выстригать параметр тега либо запрещать к постингу.
     
  8. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    Все зависит от того, какие параметры в тэгах прописывает этот редактор, если этих параметров мало (только в картинках например), то такие параметры добавляем в исключения, а остальные все вырезаем регулярным выражением.
     
  9. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    267
    Пусть например редактор пропускает только тег STRONG, но он же не фильтрует содержимое внутри тега (см. самое первое сообщение)
    Код:
    <STRONG onclick="alert('13');">gfsgfdgfsgfd</STRONG>
    Как удалить ненужные теги - это понятно striptags() с нужными параметрами, а вот как убрать из тега все ненужное... вот в чем вопрос.
     
  10. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    А если сделать замену выражения
    на просто тэг <strong> и все.
     
Статус темы:
Закрыта.