在 php 中清理输入和输出的圣杯?

Posted

技术标签:

【中文标题】在 php 中清理输入和输出的圣杯?【英文标题】:The holy grail of cleaning input and output in php? 【发布时间】:2011-12-10 06:50:40 【问题描述】:

在过去的 8 个月里,我一直在运行和开发一个分类网站,所有的错误都归咎于一个原因:用户如何输入他们的文本......

我的问题是:有没有php类,插件,我能做的事情

$str = UltimateClean($str) 在将 $str 发送到我的 sql 之前??

PS。当我开始使用 JSON 时,我还注意到问题加倍,因为我还必须小心以 JSON 格式输出结果..

我遇到的一些问题:多语言字符串(不同的字符集)、从 Excel 工作表复制粘贴。 注意:我不担心 SQL 注入。

【问题讨论】:

Is this a safe/strong input sanitization function? 或 Is htmlentities() and mysql_real_escape_string() enough for cleaning user input in PHP? 或任何其他 search results 的可能重复项。您的 JSON 查询需要详细说明。 【参考方案1】:

不,没有。

不同的转义模式用于不同的目的。你无法普遍逃避某些事情。

对于数据库:使用PDO with prepared queries

对于 HTML: 使用 htmlspecialchars()

对于 JSON:json_encode() 为您处理此问题

对于字符集:您应该在您的页面上使用 UTF-8。这样做,并相应地设置您的数据库,然后看着这些问题消失。

【讨论】:

也许还可以考虑使用 ckeditor 等库来进行文本输入。这些可以帮助处理从单词粘贴的场景,但它是客户端的。 我想我说的是“帮助”,无论如何,JSON 意味着客户端,并且 OP 建议用户输入是问题的一部分。 +1 表示“你不能普遍逃避某些事情”。如果您觉得需要“通用转义”,则可能是您过早地转义了输入,或者将转义的数据重新用于不适合的目的。

以上是关于在 php 中清理输入和输出的圣杯?的主要内容,如果未能解决你的问题,请参考以下文章

用php输出图片,怎么让浏览器缓存

在 Rails 中清理输入 XSS 和 HTML 输入

PHP输出单引号和双引号作为输入元素的值

如何在 Perl 中清理无效的 UTF-8?

在将数据输出回文本区域时,如何正确清理从文本区域接收的数据?

php输出星期几