【问题标题】:<script> tags - Will leaving/creating a space (< script>) reduce the threat of XSS?<script> 标签 - 留下/创建空间(<script>)会减少 XSS 的威胁吗?
【发布时间】:2011-10-20 21:51:00
【问题描述】:

我正在为我的网站创建一个聊天小部件。用户将能够输入纯文本 - 没有 html。

为了消除 HTML 标签 AND 以允许用户使用“”,我正在接受他们的输入并在输入和 htmlentities() 上使用 strip_tags() 对其进行清理在用户屏幕的输出上---使用 php.ini一个问题是,如果用户输入“Russia

我的问题是......如果我使用正则表达式在“

说,如果这样的事情溜走了:

alert('一些恶意代码');

创建该空间的一个优点(例如 )似乎是 strip_tags() 将单独留下“

感谢您的任何建议。

【问题讨论】:

  • stripTags() 你的意思是strip_tags()?另外,如果您的正则表达式失败怎么办? &lt;&lt;script&gt;,例如
  • 是的,strip_tags()。谢谢。我的想法是我会做一个 preg_replace() (全局)在每个“”不会构成 XSS 威胁,但我的直觉告诉我,我不应该这么确定......
  • 我正在对从 MySQL DB(用户条目)输出到用户浏览器的所有内容执行 htmlentities()。
  • 怎么样?使用 HTML 转义,不要去掉标签。是否应该允许用户在聊天中讨论

标签: php xss sanitization


【解决方案1】:

增加的空间足以阻止标签被strip_tags、and from being rendered as HTML by browsers剥离。

但是你会在什么时候使用这样的正则表达式呢?如果您在完成strip_tags() 之后添加它,则合法文本将已被删除。如果您在strip_tags() 之前添加它,则不会有任何标签可剥离,因此用户将在文本中看到间隔的 HTML 标签。

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

即使是 HTML 解析器也无济于事,因为 HTML 解析器也会将您示例中的 &lt;China 视为标记。

输入a&lt;b 的人是在进行比较、谈论HTML、试图强调,还是试图注入恶意脚本?

【讨论】:

  • 该人将进行比较 - 例如拉里伯德
  • @broncozr 确实会。如果它不是一个特别技术性的网站,那么可能不会发布太多的 HTML。并且尝试过的人会很快发现它不起作用......如果你真的想要allow some HTML。
  • @broncozr 哦,Chris Shiflett also said:“我讨厌在博客上发表评论,因为我的评论会通过类似 strip_tags() 的方式传递,从而有效地破坏了我想说的话。” ;)
  • 哈哈。好吧,这是我读过的一篇相当古老的文章,IIRC。感谢您的帮助。
【解决方案2】:

只需使用htmlspecialchars()。这是清理 HTML 所需的唯一功能。只要您明智地使用它,XSS 威胁就会被消除。如果要显示多行,请使用 nl2br,否则文本将显示在一行上。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2012-08-24
    • 2013-06-16
    相关资源
    最近更新 更多