繁体   English   中英

PHP和MySQL-在显示给用户之前,从数据库中提取数据时是否应验证/清除数据?

[英]PHP and MySQL - Should I validate/sanitize my data when pulling it from my database before displaying to user?

在将所有数据插入数据库之前,我会对其进行验证和清理。 在显示数据库之前将其从数据库中拉出,对它进行验证是否被认为是好的还是多余的做法?

归结为信任您自己的代码的程度。 在一个极端情况下,如果我知道只有我会使用客户端接口并且永远不会犯错误,那么我可以完全放弃验证。 另一方面,我可以在每个班级中验证数据,以防我与其他人一起工作而他们忘记正确地完成工作。 但是,在这种情况下,通常的良好做法是什么?

输入验证应为是/否。 您不应修改输入并将其保存。

从数据库中拉出之后,在显示之前,您应该使用Htmlentities。 这是因为最好在出现故障时使用它之前清除数据。 这就是为什么准备好的语句如此出色地工作的原因,因为您无需依赖外部代码。

假设您忘记以1种形式清理1个字段,那么当您将该数据输出给其他用户时,您将无法从执行输出的代码中看到该错误(假设其不在同一文件中)。

清理和最终结果之间的代码越少越好。

现在,这并不是说保存所有内容并在以后进行验证。 以电子邮件为例,在保存之前,您应该先验证电子邮件的格式正确。

但是对于其他事情,您不想修改用户输入。 进行文件上传。 有人会更改文件名以进行清理,替换空格等。这很好,但我更喜欢创建自己的文件名,然后向其显示原始文件名,而我在服务器上使用的文件名是其用户名的哈希值,文件名。 他们从来不知道这一点,我得到了干净的文件名。

您开始修改用户数据,维护它变得很繁琐。 您可能需要取消对其进行修改,以便他们可以对其进行编辑...等等。这意味着您要进行更多的工作,而不是仅在输出时对其进行清理。

例如,用<br>标记替换用户\\n行返回的简单动作。 用户在文本字段中输入内容,然后将其更改为html并保存。 (出于安全原因,除了不执行此操作),当用户要编辑数据时,您必须使用<br>并将其替换为\\n以便他们进行编辑。 安全原因是,您已经确定该字段中的原始HTML可以,并且只会输出原始字段,从而使某人可以添加自己的HTML。 因此,通过修改用户数据,我们为自己创建了更多工作,并且我们假设在输出数据之前,数据在插入之前是干净的。 而且,我们在输出时看不到它是如何清理的。

因此答案是,它取决于数据和您正在执行的卫生措施。

希望有道理。

我猜想在插入数据库之前,您无需像验证数据库那样对数据进行验证或清除。攻击者始终会处理发送给服务器的数据,而只是分析数据是否作为响应。 它们与输入一起发挥作用,而不与输出一起起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM