【发布时间】:2016-07-20 20:08:07
【问题描述】:
从安全的角度来看,PDO 准备好的语句是否足以防止与 mysql 相关的安全问题?或者我也应该在服务器端进行字符验证。目前我正在使用 pdo 准备好的语句和客户端 javascript 表单检查(但据我了解,可以禁用 javascript)。
最诚挚的问候,
克里斯
【问题讨论】:
-
你还需要服务器端验证。
标签: javascript php mysql pdo
从安全的角度来看,PDO 准备好的语句是否足以防止与 mysql 相关的安全问题?或者我也应该在服务器端进行字符验证。目前我正在使用 pdo 准备好的语句和客户端 javascript 表单检查(但据我了解,可以禁用 javascript)。
最诚挚的问候,
克里斯
【问题讨论】:
标签: javascript php mysql pdo
这里实际上存在三个问题,每个问题都需要不同的方法。
数据验证涉及验证是否提供了所有必需的表单参数、它们的长度是否可接受以及内容类型是否正确。如果您没有可以信任的 ORM,则需要自己执行此操作。
数据转义涉及以一种避免 SQL 注入的方式将数据插入数据库。准备好的语句是防止这种情况的好工具。
数据展示涉及避免 XSS 问题,即您显示的内容可能被误解为脚本或 HTML。您至少需要在这里使用htmlspecialchars。
请注意,如果您使用development framework,所有这三个问题都已解决。 Laravel 是一个值得一看的好方法,因为文档很详尽,让您了解这一切是如何结合在一起的,但还有很多其他内容可供选择。
【讨论】:
您可以将数据直接传递到您的数据库中,但是如果用户提交的数据是闪避的,或者它可能只是无效的怎么办?他们可能会提交字母而不是数字,或者电子邮件地址可能包含无效字符。
您可以使用 PHP 的内置 Filters 来增强服务器端的验证。
您可以使用它们来清理和验证您的数据。
Validation filters 检查用户提供的数据是否有效。例如,电子邮件是否有效?这个数字实际上是一个数字吗?文本是否匹配某个正则表达式?
Sanitization filters 基本上删除给定数据类型的无效字符。即删除不安全字符、删除无效的电子邮件/URL 字符、删除非数字字符。
有一个bunch of helper methods 可以清理和验证单个值、数组和关联数组,还有_GET 和_POST 数组。
【讨论】: