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。因此,通过修改用户数据,我们为自己创建了更多的工作,并且我们假设数据在输出时插入之前是干净的。当我们输出它时,我们看不到它是如何被清洗的
所以答案是,这取决于数据和你在做什么
希望这是有道理的。