Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和MySQL—在向用户显示数据之前,从数据库中提取数据时是否应该验证/清理数据?_Php_Database_Validation_Security_Sanitization - Fatal编程技术网

PHP和MySQL—在向用户显示数据之前,从数据库中提取数据时是否应该验证/清理数据?

PHP和MySQL—在向用户显示数据之前,从数据库中提取数据时是否应该验证/清理数据?,php,database,validation,security,sanitization,Php,Database,Validation,Security,Sanitization,在将数据插入数据库之前,我对所有数据进行验证和清理。在显示它之前,从数据库中提取它来验证它,这会被认为是好的还是多余的 这可以归结为您对自己的代码的信任程度。在一个极端上,如果我知道onlyI将使用客户端接口并且永远不会出错,我可以完全放弃验证。另一方面,我可以验证每个类中的数据,以防我和其他人一起工作时,他们忘记正确地完成他们的工作。但是,在这种特殊情况下,什么通常是一种好的做法呢?我想不需要在插入之前验证或清理数据库中的数据 攻击者总是处理发送到服务器的数据,只是分析作为响应的数据。它们处理

在将数据插入数据库之前,我对所有数据进行验证和清理。在显示它之前,从数据库中提取它来验证它,这会被认为是好的还是多余的


这可以归结为您对自己的代码的信任程度。在一个极端上,如果我知道onlyI将使用客户端接口并且永远不会出错,我可以完全放弃验证。另一方面,我可以验证每个类中的数据,以防我和其他人一起工作时,他们忘记正确地完成他们的工作。但是,在这种特殊情况下,什么通常是一种好的做法呢?

我想不需要在插入之前验证或清理数据库中的数据
攻击者总是处理发送到服务器的数据,只是分析作为响应的数据。它们处理输入,而不是输出。因此,在将数据发送到服务器或数据库之前,只需保护您的数据。

我想不需要在插入之前验证或清理数据库中的数据
攻击者总是处理发送到服务器的数据,只是分析作为响应的数据。它们处理的是输入而不是输出。因此,在将数据发送到服务器或数据库之前,请确保数据的安全。

输入验证应该是一个“是/否”命题。您不应该修改输入并保存它

您应该在从数据库拉取之后和显示之前使用Htmlentities。这是因为最好在发生故障时使用数据之前清理数据。这就是为什么准备好的语句工作得这么好,因为没有依赖的外部代码

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

消毒和最终结果之间的代码越少越好

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

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

您开始修改用户数据,维护它就成了一件琐事。您可能必须取消修改,以便他们可以对其进行编辑。。。等,这意味着你正在做更多的工作,然后如果你只是清洁它时,输出它

例如,用

标记替换用户
\n
行返回的简单操作。用户输入文本字段,然后将其更改为html并保存。(除了不这样做的安全原因外)当用户想要编辑数据时,您必须使用

并将其替换为
\n
,以便他们可以编辑数据。出于安全原因,现在您已经决定该字段中的原始HTML是可以的,并且只输出原始字段,允许某人添加自己的HTML。因此,通过修改用户数据,我们为自己创建了更多的工作,并且我们假设数据在输出时插入之前是干净的。当我们输出它时,我们看不到它是如何被清洗的

所以答案是,这取决于数据和你在做什么


希望这是有意义的。

输入验证应该是一个是/否命题。您不应该修改输入并保存它

您应该在从数据库拉取之后和显示之前使用Htmlentities。这是因为最好在发生故障时使用数据之前清理数据。这就是为什么准备好的语句工作得这么好,因为没有依赖的外部代码

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

消毒和最终结果之间的代码越少越好

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

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

您开始修改用户数据,维护它就成了一件琐事。您可能必须取消修改,以便他们可以对其进行编辑。。。等,这意味着你正在做更多的工作,然后如果你只是清洁它时,输出它

例如,用

标记替换用户
\n
行返回的简单操作。用户输入文本字段,然后将其更改为html并保存。(除了不这样做的安全原因外)当用户想要编辑数据时,您必须使用

并将其替换为
\n
,以便他们可以编辑数据。出于安全原因,现在您已经决定该字段中的原始HTML是可以的,并且只输出原始字段,允许某人添加自己的HTML。因此,通过修改用户数据,我们为自己创建了更多的工作,并且我们假设数据在输出时插入之前是干净的。当我们输出它时,我们看不到它是如何被清洗的

所以答案是,这取决于数据和你在做什么

希望这是有道理的。