【问题标题】:Are PDO prepared statements enough [duplicate]PDO 准备好的语句是否足够[重复]
【发布时间】:2016-07-20 20:08:07
【问题描述】:

从安全的角度来看,PDO 准备好的语句是否足以防止与 mysql 相关的安全问题?或者我也应该在服务器端进行字符验证。目前我正在使用 pdo 准备好的语句和客户端 javascript 表单检查(但据我了解,可以禁用 javascript)。

最诚挚的问候,

克里斯

【问题讨论】:

  • 你还需要服务器端验证。

标签: javascript php mysql pdo


【解决方案1】:

这里实际上存在三个问题,每个问题都需要不同的方法。

数据验证涉及验证是否提供了所有必需的表单参数、它们的长度是否可接受以及内容类型是否正确。如果您没有可以信任的 ORM,则需要自己执行此操作。

数据转义涉及以一种避免 SQL 注入的方式将数据插入数据库。准备好的语句是防止这种情况的好工具。

数据展示涉及避免 XSS 问题,即您显示的内容可能被误解为脚本或 HTML。您至少需要在这里使用htmlspecialchars

请注意,如果您使用development framework,所有这三个问题都已解决。 Laravel 是一个值得一看的好方法,因为文档很详尽,让您了解这一切是如何结合在一起的,但还有很多其他内容可供选择。

【讨论】:

    【解决方案2】:

    您可以将数据直接传递到您的数据库中,但是如果用户提交的数据是闪避的,或者它可能只是无效的怎么办?他们可能会提交字母而不是数字,或者电子邮件地址可能包含无效字符。

    您可以使用 PHP 的内置 Filters 来增强服务器端的验证。

    您可以使用它们来清理和验证您的数据。

    Validation filters 检查用户提供的数据是否有效。例如,电子邮件是否有效?这个数字实际上是一个数字吗?文本是否匹配某个正则表达式?

    Sanitization filters 基本上删除给定数据类型的无效字符。即删除不安全字符、删除无效的电子邮件/URL 字符、删除非数字字符。

    有一个bunch of helper methods 可以清理和验证单个值、数组和关联数组,还有_GET_POST 数组。

    Nettuts 有一些很好的教程herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 2013-10-26
      • 1970-01-01
      • 2015-08-25
      • 2011-08-02
      • 2014-03-12
      相关资源
      最近更新 更多