如何验证 Summernote 中的文本 - Php

Posted

技术标签:

【中文标题】如何验证 Summernote 中的文本 - Php【英文标题】:How to validate text from Summernote - Php 【发布时间】:2014-06-02 12:25:40 【问题描述】:

我有一些关于如何避免Xss注入和删除标签的问题:

我正在使用sommernote,我想允许一些标签,如<br>, <p>, <strong>, etc.。我可以使用函数 strip_tags() 但如果有人写符号更大 (>) 或更少 (

(4 > 5)。

这已被删除,我想保留它。

此外,我需要知道输入文本的正确长度,因为我不想允许超过 N 个字符,比如说不超过 300 个字符。为了得到这个,我会使用 strip_tags() 但字符串被截断,正如我之前提到的。我该怎么做?

显然,我想避免 XSS 注入,所以我会使用htmlentities(strip_tags(string), ENT_QUOTES) 保存在数据库中,当我想在主页中显示内容时,我会使用 html_entity_decode(string),这足以避免它吗?

提前致谢

【问题讨论】:

我建议使用HTML Purifier。在实施安全措施时,最好使用一个广泛且经过良好测试的库,而不是自己创建一些东西。 【参考方案1】:

不要使用 strip_tags!如果用户尝试输入类似The bob said <the-secret> 的内容,它将被删除! htmlentities 是不必要的。你要htmlspecialchars:

$input = "<script>alert('ur screwed')</script>";
echo htmlspecialchars($input);

返回&amp;lt;script&amp;gt;alert('ur screwed')&amp;lt;/script&amp;gt;。使用htmlspecialchars_decode解码。

【讨论】:

其实我是想说htmlspecialchars(),搞糊涂了。我的问题是,如果我使用 htmlspecialchars_decode() 在主页中显示,我会写成原句,在这种情况下:&lt;script&gt;alert('ur screwed')&lt;/script&gt; 或者我错了? 您不需要解码(通常)。存储在数据库中,当它出来时做一个 htmlspecialchars。 好的,但我想显示是否有人写 &lt;pr&gt;something&lt;/p&gt;,因为我正在使用 sommernote,如果我使用 htmlspecialchars() 保存,我将不得不使用 htmlspecialchars_decode() 来显示它在浏览器上可以很漂亮。 这将是一个额外的复杂性之后你编码数据。在进入数据库之前不要对数据进行编码,而是在之后进行。 This 可能会有所帮助(并且会造成混淆)。

以上是关于如何验证 Summernote 中的文本 - Php的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Summernote 中的默认文本突出显示颜色?

带有 Summernote 的 Codeigniter - 验证问题

在 Summernote 中的后退按钮上取回文本

文本未从 Laravel 中的 Summernote 存储

如何从summernote文本编辑器导出纯文本

如何在summernote文本编辑器中禁用右键单击