& lt; script>标签-将留下/创建一个空间(<script>)减少XSS的威胁


<script> tags - Will leaving/creating a space (< script>) reduce the threat of XSS?

我正在为我的网站创建一个聊天小部件。用户将能够直接输入文本-不需要html。

为了消除HTML标记以允许用户使用"<"answers">",我正在获取它们的输入并使用strip_tags()对输入和htmlentities()对输出到用户屏幕的内容进行消毒——使用php。一个问题是,如果用户输入"Russia<China",strip_tags()将贪婪地消除"><"之后的所有内容。>

我的问题是……如果我使用正则表达式在"<"和下一个非空格字符之间创建一个空格,这会帮助我消除XSS的威胁吗?它会阻止潜在的HTML标签呈现在用户的屏幕上吗?

说,如果像这样的东西通过:

& lt;Script type='text/javascript'>alert('一些恶意代码');

创建该空间的一个优势(例如<脚本…>)似乎是strip_tags()将保留"<"。

谢谢你的建议

添加的空间足以阻止标记被strip_tags剥离,并被浏览器呈现为HTML。

但是在什么情况下你会使用这样的正则表达式呢?如果您在完成strip_tags()之后添加它,则合法文本将已经被剥离。如果你在strip_tags()之前添加它,就不会有任何标签留下,所以用户会在文本中看到间隔的HTML标签。

但是如果他们无论如何都会看到(破损的)标签,你为什么要这样做呢?你可以只做htmlspecialchars(),无论如何你都必须这样做。

即使是HTML解析器也不能帮助您,因为HTML解析器也会将示例中的<China视为标签。

输入a<b的人是在做比较,谈论HTML,试图增加强调,还是试图注入恶意脚本?

直接使用htmlspecialchars()。这是清理HTML所需的唯一函数。只要您明智地使用XSS,就可以消除它的威胁。如果您想要显示多行,则在后面加上nl2br,否则文本将显示在一行上。

strip_tags是永远、永远、永远 HTML进行处理的正确函数。在最好的情况下,它将吃掉或破坏某些有效文本。在最坏的情况下,如果使用allowed_tags参数,它不会清理任何东西,因为属性被保留了。它也不能阻止HTML实体

相关文章: