我知道多年来有很多关于使用PHP过滤数据的最佳方法的讨论,但我想在我当前的项目中采用白名单方法。
我只希望用户能够使用以下HTML
<b>bold</b>
<i>italics</i>
<u>underline</u>
<s>strikethrough</s>
<big>Big size</big >
<small>Small size</small>
Hyperlink <a href="http://www.site.com">website</a>
A Bulleted List:
<ul>
<li>One Item</li>
<li>Another Item</li>
</ul>
An Ordered List:
<ol>
<li> First Item</li>
<li> Second Item</li>
</ol>
<blockquote>Because it is indented</blockquote>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>
有人能告诉我在PHP中执行此操作的最佳方法吗?我过去只允许所有html减去某些代码
答案 0 :(得分:8)
我相信 HTML Purifier Library 可以很好地运作:
<强> http://htmlpurifier.org/ 强>
HTML Purifier符合标准 用PHP编写的HTML过滤器库。 HTML Purifier不仅会删除所有内容 恶意代码(更好地称为XSS) 经过全面审核,安全无缺 容许白名单,它也会 确保您的文件是标准 合规,只有可以实现的东西 具有全面的知识 W3C的规格。厌倦了使用 BBCode由于当前的景观 缺陷或不安全的HTML过滤器? 有一个WYSIWYG编辑器,但从来没有 能用吗?寻找 高品质,符合标准, 开源组件 你正在建设的申请? HTML 净化器适合你!
答案 1 :(得分:1)
最简单的解决方案是strip_tags(),
,它接受包含允许标记的第二个参数:
strip_tags($string, "<b><i><u><a><s><big><small><ul><li><ol><blockquote><h1><h2><h3>");
答案 2 :(得分:1)
另一条路线是使用带有第二个参数的strip_tags。
答案 3 :(得分:1)
我会通过整理运行提交的代码来首先对其进行规范化,然后使用xpath或应用xslt来仅选择允许的元素。这样,没有可以泄漏。还要记住,在任何给定的网站情况下,对于每个写入请求[使用整齐和xpath / xslt],您可能会有成千上万的读取请求,因此平均而言,性能影响可以忽略不计。如果你正在进行批处理......
编辑:哦和:不要使用正则表达式执行此操作。在数学上不可能正确地做到这一点。