Будет ли это удалить все возможные теги сценария? - PullRequest
1 голос
/ 18 сентября 2009

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

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

<\s*script\s*>.*?<\s*\/script\s*>

Редактировать

или лучше попытаться изменить их все на безопасные теги? Вы знаете, где это делает HTML кодирование на тегах? Но это может быть только в тегах скрипта, так как я все еще хочу разрешить другие теги html, такие как <b> и прочее.

Ответы [ 5 ]

7 голосов
/ 18 сентября 2009

Почти во всех случаях, когда вы хотите отфильтровать подобные вещи, лучше проверить, что именно вы хотите разрешить , а не то, что вы хотите запретить . Существует миллион творческих способов скрыть теги <script> в исходном HTML-коде, и вы не хотите пытаться играть в гонку, чтобы догнать новые, которые могут придумать люди. С другой стороны, вы можете довольно легко создать список допустимых тегов и позволить людям использовать их.

3 голосов
/ 18 сентября 2009

Это не единственный тег, который может нанести ущерб. Учтите следующее:

<a href="javascript:window.close()">

Кроме того, нет, не будет. Опять же, учтите следующее:

<script language="javascript">window.close()</script>

Даже если вы развернете его для обработки атрибутов тега сценария, как насчет:

<script src="http://somesite.com/malicious.js" />

Если честно, по моим личным оценкам, лучший способ - это либо иметь очень явный белый список разрешенных тегов / атрибутов, либо ввести собственную разметку и вообще запретить использование только открытого HTML.

EDIT:

Дополнительная информация для вас:

Белый список - это просто список разрешенных вещей, все остальное запрещено, в отличие от вашего первоначального представления о черном списке, где тег сценария запрещен, но все остальное разрешено.

1 голос
/ 18 сентября 2009

Это регулярное выражение позволит что-то вроде <script foo=bar><script> пройти (и множество подобных вещей, которые могут вызвать хаос, но есть и такие вещи, о которых люди часто забывают:

 <foo onload="document.write('<scri'+'pt>...<'+'/script>')"></foo>

, что также осложняет жизнь: - (

0 голосов
/ 18 сентября 2009
<b style="left:expression(alert('IE just got pwned'));">Oops...</b>

Вот хорошее обсуждение вопросов: Очистка HTML - чрезвычайно сложная проблема.

0 голосов
/ 18 сентября 2009

Вы можете использовать эти Образцы , которые демонстрируют, как использовать MSHTML, с анализатором UI-Less, вы можете удалить теги сценариев, а также реализовать собственный хост службы, который может полностью отключить JavaScript в вашем приложении и Вот обсуждение , которое мне однажды помогло.

Существует два способа: 1 вы можете установить режим разработки, который не выполняет javascript, и другой, если вы можете отключить опцию URLACTION_SCRIPT_JAVA_USE;

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