为什么 MGans 的 HtmlSanitizer 会删除这些标签?

问题描述

我正在考虑使用 MGans 的 HtmlSanitizer Nuget 包来清理我们应用程序的输入和输出。给定以下输入并应用 Sanitize() 方法,将返回以下内容

输入:

this  is my data
<p> here</p>
<script type="text/javascript"/>
<b>and here</b>
alert("something");
done here
<script type="text/javascript">alert("again");</script>
done

输出

this  is my data
<p> here</p>

done

如果第一个 <b>and here</b> 标记是没有参数的自闭合标记,为什么要删除标记 alert("something");done here 和文本 <script/>

解决方法

在 HTML4 和 HTML5 中,<script> 标签不能自闭合。自闭合标签是规范中的 void elements

解析时,第一个 <script> 标签被视为开始标签,最后一个 </script> 标签是其结束标签。

浏览器会将斜杠视为格式错误的输入并忽略它,然后将其后的内容作为 JavaScript 代码执行。