Этот набор регулярных выражений полностью защищает от перекрестных сценариев сайта?

Переключатели - это запах кода, который говорит, что ваш код не является ОО. В этом случае у вас могут быть различные типы SearchModel с методом search, реализованным по-разному для каждого типа.

6
задан Timwi 23 August 2010 в 11:58
поделиться

10 ответов

Это никогда не достаточно – белый список, не помещать в черный список

Например, javascript: псевдо-URL может быть запутан с объектами HTML, Вы забыли о <embed> и существуют опасные свойства CSS как behavior и expression в IE.

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

Существует только два хороших способа защитить HTML:

  • преобразуйте его для отправки текстовых сообщений путем замены каждого < с &lt;.
    Если Вы хотите позволить пользователям, вводят форматированный текст, можно использовать собственную разметку (например, скидка с цены как ТАК делает).

  • проанализируйте HTML в DOM, проверьте каждый элемент и припишите и удалите все, что не добавлено в белый список.
    Необходимо будет также проверить содержание позволенных атрибутов как href (удостоверьтесь, что URL используют безопасный протокол, блок все неизвестные протоколы).
    После того как Вы очистили DOM, генерируйте новый, допустимый HTML от него. Никогда не работайте над HTML, как будто это был текст, потому что недопустимая разметка, комментарии, объекты, и т.д. может легко одурачить Ваш фильтр.

Также удостоверьтесь, что Ваша страница объявляет свое кодирование, потому что существует использование, которое использует в своих интересах браузеры, автоматически обнаруживающие неправильно кодирование.

48
ответ дан 8 December 2019 в 02:00
поделиться

Вы - очень более обеспеченное превращение всех < в &lt; и все > в &gt;, затем преобразовывая приемлемые теги назад. Другими словами, добавьте в белый список, не помещайте в черный список.

10
ответ дан 8 December 2019 в 02:00
поделиться

Поскольку David показывает, нет никакого простого способа защитить только с некоторым regexes, можно всегда забывать что-то, как JavaScript: в Вашем случае. Вы лучше выходите из объектов HTML на выводе. Существует большая дискуссия о лучшем способе сделать это, в зависимости от того, что на самом деле необходимо позволить, но что является бесспорным, то, что функция недостаточно.

Jeff говорил немного об этом здесь.

7
ответ дан 8 December 2019 в 02:00
поделиться

Как пример нападения, которое делает его через это:

  <div style="color: expression('alert(4)')">

Бесстыдный разъем: проект Caja определяет белые списки элементов HTML и атрибутов так, чтобы он мог управлять, как и когда сценарии в HTML выполняются.

См. проект по http://code.google.com/p/google-caja/, и белые списки являются файлами JSON в http://code.google.com/p/google-caja/source/browse/#svn/trunk/src/com/google/caja/lang/html и http://code.google.com/p/google-caja/source/browse/#svn/trunk/src/com/google/caja/lang/css

3
ответ дан 8 December 2019 в 02:00
поделиться

Смотрите на XSS cheatsheet по http://ha.ckers.org/xss.html, это не полный список, а хорошее начало.

Тем, который приходит на ум, является <img src = "http://badsite.com/javascriptfile"/>

Вы также забыли onmouseover и тег style.

Самой легкой вещью сделать действительно является выход объекта. Если вектор не может представить правильно во-первых, неполный черный список не будет иметь значения.

3
ответ дан 8 December 2019 в 02:00
поделиться
<a href="javascript:document.writeln('on' + 'unload' + ' and more malicious stuff here...');">example</a>

Любое время, которое можно записать строке в документ, большой двери, распахивается.

Существуют бесчисленные места для введения злонамеренных вещей в HTML/JavaScript. Поэтому Facebook первоначально не позволил JavaScript в их платформе приложений. Их решение состояло в том, чтобы позже реализовать компилятор разметки/сценария, который позволяет им серьезно отфильтровывать плохой материал.

Как сказано уже, добавьте в белый список несколько тегов и атрибутов и разделите все остальное. Не помещайте в черный список несколько известных злонамеренных атрибутов и позволяйте все остальное.

4
ответ дан 8 December 2019 в 02:00
поделиться

Хотя я не могу обеспечить определенный пример того, почему не, я собираюсь идти вперед и напрямую сказать "нет". Это находится больше на принципале. Regex является удивительным инструментом, но они должны только использоваться для определенных проблем. Они являются фантастическими для соответствия данных и поиска.

Они не однако хороший инструмент для безопасности. Слишком легко испортить regex и иметь его быть только частично корректным. Хакеры могут найти много пространства для маневра в плохо или даже хорошо созданный regex. Я попробовал бы другую авеню для предотвращения перекрестных сценариев сайта.

3
ответ дан 8 December 2019 в 02:00
поделиться

Пробел делает Вас уязвимыми. Считайте это.

2
ответ дан 8 December 2019 в 02:00
поделиться

Другое голосование за белый список. Но похоже на движение об этом неправильного пути. Путем я делаю это, должен проанализировать HTML в дерево тегов. Если тег, который Вы анализируете, находится в белом списке, дайте ему древовидный узел и синтаксический анализ на. То же идет для его атрибутов.

Отброшенные атрибуты просто отбрасываются. Все остальное оставлено из HTML литеральное содержание.

И премия этого маршрута - то, потому что Вы эффективно повторно создаете всю разметку, это - вся абсолютно допустимая разметка! (Я ненавижу его, когда люди оставляют комментарии, и они завинчивают проверку/дизайн.)

Ре "Я не могу добавить в белый список" (параграф): Помещение в черный список является тяжелым обслуживанием подходом. Необходимо будет следить за новым использованием и удостовериться покрытое. Это - скудное существование. Просто сделайте его правильно однажды, и Вы никогда не должны будете касаться его снова.

1
ответ дан 8 December 2019 в 02:00
поделиться

С другой точки зрения, что происходит, когда кто-то хочет иметь 'JavaScript' или 'functionload' или 'visionblurred' в том, что они отправляют? Это может произойти в большинстве мест для всевозможных причин... Из того, что я понимаю, они станут 'javaSAFEscript', 'functionSAFEload' и 'visionSAFEblurred' (!!).

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

1
ответ дан 8 December 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: