PHP 和 MySQL - 在显示给用户之前从我的数据库中提取数据时,我应该 validate/sanitize 我的数据吗?
PHP and MySQL - Should I validate/sanitize my data when pulling it from my database before displaying to user?
我在将所有数据插入数据库之前对其进行验证和清理。在显示之前从数据库中提取它时对其进行验证是否被认为是一种好的或多余的做法?
这归结为对自己代码的信任程度。一种极端情况是,如果我知道只有我会使用客户端界面并且 永远不会 出错,我就可以完全放弃验证。另一方面,我可以验证每个 class 中的数据,以防我与其他人一起工作而他们忘记正确完成工作。但在这种特殊情况下,一般好的做法是什么?
我想在插入之前不需要验证或清理数据库中的数据
攻击者总是使用他发送到服务器的数据,只是分析作为响应出现的数据。他们玩输入而不是 output.So 只是在将数据发送到服务器或数据库之前保护您的数据。
输入验证应该是一个 yes/no 命题。您不应该修改输入并保存它。
您应该在从数据库中提取之后和显示之前使用 Htmlentities。这是因为最好在故障点使用数据之前清理数据。这就是准备好的语句运行良好的原因,因为没有您依赖的外部代码。
假设您忘记清理 1 个表单中的 1 个字段,那么当您将该数据输出给其他用户时,您无法从执行输出的代码中看到该错误(假设它不在同一个文件中)。
清理和最终结果之间的代码越少越好。
这并不是说保存所有内容并稍后验证。以电子邮件为例,您应该在保存之前验证其格式是否正确。
但对于其他您不想修改用户输入的内容。以文件上传为例。有些人会更改文件名以对其进行清理、替换空格等。这很好,但我更喜欢创建自己的文件名,然后向他们显示原始文件名,而我在服务器上使用的是他们的用户名和文件的名称。他们永远不知道这一点,我得到了干净的文件名。
您开始修改用户数据,维护它就成了一件苦差事。您可能必须 un-modify 它以便他们可以对其进行编辑...等等。这意味着您将做更多的工作,如果您只是在输出时清理它。
以用 <br>
标签替换用户 \n
行 returns 的简单操作为例。用户输入文本字段然后将其更改为 html 并保存。 (除了不这样做的安全原因)当用户想要编辑数据时,您必须使用 <br>
并将它们替换为 \n
以便他们可以编辑它。出于安全原因,现在您已经确定该字段中的原始 HTML 没问题,并且只会输出原始字段,从而允许其他人添加他们自己的 HTML。所以通过修改用户数据我们给自己制造了更多的工作,并且我们在输出的时候假设数据在插入之前是干净的。而且输出的时候看不到是怎么清洗的
所以答案是这取决于数据和您正在做的卫生设施。
希望这是有道理的。
我在将所有数据插入数据库之前对其进行验证和清理。在显示之前从数据库中提取它时对其进行验证是否被认为是一种好的或多余的做法?
这归结为对自己代码的信任程度。一种极端情况是,如果我知道只有我会使用客户端界面并且 永远不会 出错,我就可以完全放弃验证。另一方面,我可以验证每个 class 中的数据,以防我与其他人一起工作而他们忘记正确完成工作。但在这种特殊情况下,一般好的做法是什么?
我想在插入之前不需要验证或清理数据库中的数据 攻击者总是使用他发送到服务器的数据,只是分析作为响应出现的数据。他们玩输入而不是 output.So 只是在将数据发送到服务器或数据库之前保护您的数据。
输入验证应该是一个 yes/no 命题。您不应该修改输入并保存它。
您应该在从数据库中提取之后和显示之前使用 Htmlentities。这是因为最好在故障点使用数据之前清理数据。这就是准备好的语句运行良好的原因,因为没有您依赖的外部代码。
假设您忘记清理 1 个表单中的 1 个字段,那么当您将该数据输出给其他用户时,您无法从执行输出的代码中看到该错误(假设它不在同一个文件中)。
清理和最终结果之间的代码越少越好。
这并不是说保存所有内容并稍后验证。以电子邮件为例,您应该在保存之前验证其格式是否正确。
但对于其他您不想修改用户输入的内容。以文件上传为例。有些人会更改文件名以对其进行清理、替换空格等。这很好,但我更喜欢创建自己的文件名,然后向他们显示原始文件名,而我在服务器上使用的是他们的用户名和文件的名称。他们永远不知道这一点,我得到了干净的文件名。
您开始修改用户数据,维护它就成了一件苦差事。您可能必须 un-modify 它以便他们可以对其进行编辑...等等。这意味着您将做更多的工作,如果您只是在输出时清理它。
以用 <br>
标签替换用户 \n
行 returns 的简单操作为例。用户输入文本字段然后将其更改为 html 并保存。 (除了不这样做的安全原因)当用户想要编辑数据时,您必须使用 <br>
并将它们替换为 \n
以便他们可以编辑它。出于安全原因,现在您已经确定该字段中的原始 HTML 没问题,并且只会输出原始字段,从而允许其他人添加他们自己的 HTML。所以通过修改用户数据我们给自己制造了更多的工作,并且我们在输出的时候假设数据在插入之前是干净的。而且输出的时候看不到是怎么清洗的
所以答案是这取决于数据和您正在做的卫生设施。
希望这是有道理的。