处理通过应用程序的数据流的正确方法

时间:2014-01-16 13:02:01

标签: php mysql pdo database-security

这可能会被标记为重复,但在我的辩护中,我一直在寻找一段时间,而且我发现的很多信息与mysqlmysqli最多相关,或者是不完整的。我想要一个彻底的,最新的答案,这个答案会影响使用PDO和准备好的陈述。

在数据移动通过应用程序时处理数据的正确的方式是什么。

以下理论数据流量是否足够,如果没有,您会推荐哪些改进措施?

  1. 正确的表单验证客户端。
  2. 使用$_POST而不是$_GET
  3. 在PHP中,在数据库插入之前使用$variable = htmlentities($_POST['variable']);
  4. 使用PDO和准备好的语句,例如:bindValue(':variable', $variable);
  5. 在输出时,使用echo htmlspecialchars($variable);来阻止XSS攻击。
  6. 两个相关问题:

    • 假设您在数据库插入之前对数据使用htmlentities()。如果用户输入了<p>my input value</p>,如何删除插入的所有垃圾。这会将&lt;tr&gt;&lt;p&gt;my input value&lt;/p&gt;&l写入数据库。
    • 如果您的php正在返回由AJAX处理的JSON数组,那么您如何处理该场景中的输出?这在PHP中不起作用:htmlspecialchars($JSON_Array)

    先谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

一般来说,您的流程与此类似:

  1. “验证”数据客户端 - 您不希望信任此验证,因为您永远不应该信任来自客户端的任何内容,这样做是为了让用户体验更好。

  2. 在服务器上验证 - 确保提供给您的数据有效。示例可能是:验证类型(int,字符串等),验证值(用户不能订购负数量的项目)等等。如果您正在使用某种类型的MVC-ish框架,则可以在模型层。

  3. 将数据存储在数据库中 - 您将使用预准备语句来保护自己免受SQL注入,但您不希望以任何方式操作数据(无htmlentities等)。

  4. 每当您从数据库中获取数据时,您决定是否需要转换HTML实体或根据您是否输出HTML,JSON,XML等进行其他处理。

  5. 如果您需要对JSON数组中的数据使用htmlspecialchars或类似内容,请在将数据放入JSON数组之前执行该操作。