То, что лучший способ состоит в том, чтобы обработать пользователя, генерировало содержимое HTML, которое будет просматриваться общественностью?

Я имел, это происходит со мной. К сожалению, это вызывается браузером, берущим разрывы строки между элементами списка и представляющим их как пробелы. Для фиксации измените HTML на:

<div id="footer">
  <ul>
    <li><a href="one.html">One</a></li><li><a href="two.html">Two</a></li><li><a href="three.html">Three</a></li><li><a href="four.html">Four</a></li><li><a href="five.html">Five</a></li>
  </ul>
</div>
10
задан Aaron 22 October 2009 в 18:04
поделиться

2 ответа

Это вполне разумный подход. Для типичных приложений этого будет вполне достаточно.

Самая сложная часть необработанного HTML белого списка - это атрибут стиля и объект embed / . Существуют законные причины, по которым кто-то может захотеть поместить стили CSS в ненадежный блок форматированного текста или, скажем, во встроенное видео YouTube. Эта проблема чаще всего возникает с фидами. Вы можете' • доверять произвольному блоку текста, содержащемуся в записи фида, но вы не хотите вырезать, например, выделение синтаксиса CSS или флэш-видео, потому что это коренным образом изменит контент и потенциально запутает любого, кто его читает. Поскольку CSS может содержать опасные вещи, такие как поведение в IE, вам, возможно, придется проанализировать CSS, если вы решите оставить атрибут стиля . И с embed / объект вам может потребоваться занести имена хостов в белый список.

Дополнение:

В худшем случае HTML-код, скрывающий все, что находится на виду, может привести к очень плохому взаимодействию с пользователем. Намного лучше использовать что-то вроде одного из парсеров HTML5, чтобы пройти через DOM с вашим белым списком. Это гораздо более гибко с точки зрения того, как вы представляете очищенный вывод своим пользователям. Вы даже можете делать такие вещи, как:

<div class="sanitized">
  <div class="notice">
    This was sanitized for security reasons.
  </div>
  <div class="raw"><pre>
    &lt;script&gt;alert("XSS!");&lt;/script&gt;
  </pre></div>
</div>

Затем скройте материал .raw с помощью CSS и используйте jQuery для привязки обработчика кликов к .sanitized div , который переключает между .raw ] и .notice :

CSS:

.raw {
  display: none;
}

jQuery:

$('.sanitized').click(function() {
  $(this).find('.notice').toggle();
  $(this).find('.sanitized').toggle();
});
2
ответ дан 4 December 2019 в 04:21
поделиться

Белый список - хороший ход. Любое решение из черного списка склонно пропускать больше, чем должно, потому что вы просто не можете думать обо всем. Я видел несколько попыток использования черных списков (например, The Code Project), и если им удается уловить все, обычно они по-прежнему вызывают дополнительные проблемы, такие как замена символов в коде, чтобы его нельзя было использовать без предварительного восстановления вручную .

Самый безопасный метод:

  1. HTML-кодирование всего текста.

  2. Сопоставление набора разрешенных тегов и атрибутов и их декодирование.

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

Вы должны иметь возможность сделать это примерно в десяти строках кода, поэтому код, на который вы ссылаетесь, кажется чрезмерно сложным.

1
ответ дан 4 December 2019 в 04:21
поделиться
Другие вопросы по тегам:

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