ФорумПрограммированиеPHP для идиотов → Боремся с XSS

Боремся с XSS

  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 30 июня 2008 г. 16:51

    Если давать человеку добавлять html на сайт. Что нужно чикать?

    на данные момент я чикаю ненужные тэги, т.е. strip_tags($text, '… ненужные тэги …')
    потом я чикаю onmouseover'ы и т.д., т.е.
    #(onclick|onmouseover|onmouseout|onmousedown|onmouseup|onselect|onfocus|onblur|onload|onkeydown|onkeyup|ondblclick|onunload|onmouseup|onsubmit)=[\"|\'](.+?)[\"|\']#is[/quote]

    ещё собираюсь чикать <a href="javascript:…">

    что нужно гасить ещё?

    p.s. если разрешены картинки, это прокатит <img src="http://hacker.ru/hacker.js" /> ?
    все умрут, а я изумруд
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 30 июня 2008 г. 17:49, спустя 58 минут 34 секунды

    а не легче довать то что хочеш дать а нечикать то чего не хочеш
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 30 июня 2008 г. 17:53, спустя 3 минуты 24 секунды

    ну я вот и даю разрешенные теги
    и вот думаю, какие параметры у этих разрешенных тегов надо чикать
    все умрут, а я изумруд
  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 30 июня 2008 г. 18:13, спустя 20 минут 26 секунд

    Согласен с welder-ом :)
    К слову, не забудь про <img src="javascript:" /> не забыл? ;)
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 30 июня 2008 г. 18:27, спустя 13 минут 31 секунду

    чето или я дурак, но у меня
    cyka <img src="javascript:alert(1);" />
    <a href="javascript:alert('cyka');">go cyka</a>


    выдает только алерт при нажатии на ссылку
    а js в тэге <img /> не выдается и даже если ссылаться на js файл
    все умрут, а я изумруд
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 30 июня 2008 г. 18:47, спустя 20 минут 30 секунд

    в опере нормуль всё выдаеться =))
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 30 июня 2008 г. 19:24, спустя 36 минут 59 секунд


    в опере нормуль всё выдаеться =))
    вобщем, я так понимаю, надо гасить все src|href="javascript:…"
    что исчо опасного есть? )
    все умрут, а я изумруд
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 2 июля 2008 г. 13:20, спустя 1 день 17 часов 55 минут

    больше никто с XSS не борится?
    все умрут, а я изумруд
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 2 июля 2008 г. 14:31, спустя 1 час 11 минут 27 секунд

    незнаю

    я использую bbтеги и библиотеку xbb если нужно что-то от юзера получить
    http://xbb.uz/

    пользуюсь еще вот этим классом
    http://mabp.kiev.ua/content/2008/04/20/request/

    а еще читаем тут
    http://radar.oreilly.com/archives/2008/06/partial-same-origin-bypass-wit.html
  • Kuzya

    Сообщения: 26 Репутация: N Группа: Кто попало

    Spritz 14 июля 2008 г. 16:15, спустя 12 дней 1 час 43 минуты

    Если я правильно понял то речь идёт о коментариях, сообщениях и т.д. В данном случае поддерживаю CTAPbIu_MABP. Лучший вариант - использование бб-тегов. Нельзя ни в коем случае разрешать какие-то определённые теги т.к. JS-код выполняется не только через src='' но и через style и через некоторые особенности браузеров. Чем больше фильтраций через регулярки тем тяжелее пользователям.
    Сам для фильтрации данных не относящихся к сообщениям оставляемым на сайте использую вот такой небольшой код:

    function html($str)
    {
    $str = htmlspecialchars($str);
    //Пробелы в заменяемых словах из-за того что форум их преобразует в другие коды
    // При реальной работе пробелы, естественно, не нужны
    $str = str_replace('`','& acute;',$str);
    $str = str_replace("'",'& # 039;',$str);
    $str = str_replace("%",'& # 037;',$str);
    return trim($str);
    }
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 14 июля 2008 г. 16:35, спустя 20 минут 16 секунд

    Kuzya, изначально речь идет о статьях и др. материалах, где нужно более человеческое форматирование, нежели бб-коды

    style я тоже рублю

    где ещё может быть скрыта опасносте?
    все умрут, а я изумруд
  • Kuzya

    Сообщения: 26 Репутация: N Группа: Кто попало

    Spritz 14 июля 2008 г. 17:01, спустя 26 минут 8 секунд

    В ссылках. Например при использовании протокола не http:// а data:. во вставках типа флэша, видео и т.д. Много где. Обрезать всё опасное - неверный путь. Можно на SLAED CMS посмотреть - дофильтровались до того что некоторые пользователи не могут нормально зарегистрироваться.
    Если объёмы текста действительно огромные то проще переделать какойнибудь WYSIWYG и оставить в нём только такие теги как
    <center>,<b>,<i>,<p>,<u> - То есть простые теги обычного форматирования.
    Не сервере текст сначала прогонять через htmlspecialchars а потом str_replace`ом возрождать разрешённые теги, например так:
    $text = str_replace('<i>','<i>',$text);


  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 14 июля 2008 г. 17:08, спустя 7 минут 4 секунды

    Kuzya, вы не в теме
    WYSIWYG дает не фильтрацию текста а удобное его оформление тем не мение я могу туда пихнуть все что хочу

    вопрос стоит более интересно нужно запрещать все что явно не разрешено или разрешать все что явно не запрещено. я бы резал все что не разрешил.

    мне очень припала в душу ситуёвина с ipb когда у них в bb кодах находили уязвимости изза слишком большой дозволености.
    напомню там теги с параметрами были которые можно было вставлять в текст как попало
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 14 июля 2008 г. 17:09, спустя 22 секунды


    Не сервере текст сначала прогонять через htmlspecialchars а потом str_replace`ом возрождать разрешённые теги, например так:
    $text = str_replace('<i>','<i>',$text);

    что за ерунда?
    я ж говорю, отрезаю все лишние тэги с помощью strip_tags, оставляя лишь те, которые только к форматированию текста относятся + есть те, которые необходимо фильтровать, это: <a>, <img> и всё

    насчет
    например при использовании протокола не http:// а data:.
    спс, буду смотреть


    Обрезать всё опасное - неверный путь.

    нет. тут не так =) здесь — Оставить все безопасное (вернее только то, что относится к форматированию текст и по совместительству является безопасным) + ссылки и картинки. Вот над ними и надо поработать
    все умрут, а я изумруд
  • Kuzya

    Сообщения: 26 Репутация: N Группа: Кто попало

    Spritz 14 июля 2008 г. 18:30, спустя 1 час 21 минуту 45 секунд

    Kuzya, вы не в теме
    WYSIWYG дает не фильтрацию текста а удобное его оформление тем не мение я могу туда пихнуть все что хочу

    Это Вы меня не правильно поняли =) Я это к тому что форматирование большого объёма (про который писали выше)текста можно сделать проще с помощью урезанного WYSIWYG.
    вопрос стоит более интересно нужно запрещать все что явно не разрешено или разрешать все что явно не запрещено. я бы резал все что не разрешил.

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

    И в phpBB были такие. Там не большая дозволенность а кривые регулярки были.

    я ж говорю, отрезаю все лишние тэги с помощью strip_tags, оставляя лишь те, которые только к форматированию текста относятся + есть те, которые необходимо фильтровать, это: <a>, <img> и всё

    Зато свойства у "разрешённых" тегов strip_tags не режет, поэтому я не за его использование.

    ссылки и картинки

    Сделайте для них 2 бб-кода простейших типа [a]ссылка[/a] и . Только без лишних свойств типа - как раз из-за косяков регулярок через такие свойства XSS и проводят.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!