使用 php 保护简单所见即所得的最佳方法

发布于 2024-12-02 00:59:14 字数 256 浏览 2 评论 0原文

我在我的网站中添加了一个简单的所见即所得编辑器。 (它只允许 B / I / U - 不再)
我目前将所有内容以 html 形式存储在数据库中 - 但添加 或其他恶意代码很简单)

PHP 中解析此内容的最佳方法是什么输入安全吗? 如何将 等实现为白名单并对其他所有内容进行编码?

I have added a simple wysiwyg editor in my website. (it only allows B / I / U - no more)
I currently store all content as html in my database - but it's simple to add <a onclick='...'> or other malicious code)

What is the best way in PHP to parse this input safely?
How to implement <b></b>, <i></i> and so on as whitelist and encode everything else?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

耳根太软 2024-12-09 00:59:14

HTMLPurifier

我只是要把这个扔出去,可能会不可避免地受到批评。我不会使用 strip_tags 来保护您所见即所得的表单......永远(除非您想激怒您的用户)。

它不会保护您的表单,并且您可能会扼杀用户的体验。

Chris Shiftlett 在他的博客文章中写了一段很棒的段落

我讨厌在博客上发表评论,因为我的评论是通过类似 strip_tags() 之类的东西传递的,这实际上破坏了我想说的内容。它让我想起使用 IM 客户端时尝试识别表情符号并将其替换为图像,这通常会使响应难以解读。

另一个原因

其他人在另一个答案中也写了我喜欢的内容:

  $str = "10 appels is <than 12 apples";
  var_dump(strip_tags($str));

我得到的输出是:

string '10 appels is ' (length=13)

我个人不会使用除 HTMLPurifier

HTMLPurifier

HTMLPurifier

在此处尝试演示:http://htmlpurifier.org/demo.php

看看这个类似问题

HTMLPurifier

I'm just going to throw this one out there and probably get the inevitable lashing. I would not use strip_tags to secure your WYSIWYG form... ever (Unless you want to piss off your users).

It won't secure your form, and you may be killing your user's experience.

Chris Shiftlett in his blog post wrote an excellent paragraph

I detest commenting on blogs where my comment is passed through something like strip_tags(), effectively mangling what I'm trying to say. It reminds me of using an IM client that tries to identify smilies and replace them with images, often making responses difficult to decipher.

Another Reason

Someone else in another answer also wrote this which I like:

  $str = "10 appels is <than 12 apples";
  var_dump(strip_tags($str));

The output I get is:

string '10 appels is ' (length=13)

I personally would not use anything other than HTMLPurifier

HTMLPurifier

HTMLPurifier

Try a demo here: http://htmlpurifier.org/demo.php

And look at this similar question

使用strip_tags()http://php.net/manual/en/function.strip-tags.php

字符串 strip_tags ( 字符串 $str [, 字符串 $allowable_tags ] )

第二个参数是允许的标签列表;只需列出 '' ,其余部分将被删除。

请注意,正如 deceze 提到的:

此函数不会修改您所使用的标签上的任何属性
允许使用allowable_tags,包括样式和onmouseover
恶作剧的用户在发布文本时可能会滥用的属性
将向其他用户显示。

因此它本身并不能提供针对恶意代码的全面保护!

Use strip_tags(). http://php.net/manual/en/function.strip-tags.php

string strip_tags ( string $str [, string $allowable_tags ] )

The second parameter is a list of allowable tags; just list '<b><i><u>' and the rest will be stripped.

Do note that as deceze mentioned:

This function does not modify any attributes on the tags that you
allow using allowable_tags, including the style and onmouseover
attributes that a mischievous user may abuse when posting text that
will be shown to other users.

So it doesn't offer full protection from malicious code by itself!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文