1

这可能会被标记为重复,但在我的辩护中,我已经搜索了一段时间,我发现的很多信息都与mysqlmysqli充其量是相关的,或者是不完整的。我想要一个全面的、最新的答案,该答案会影响使用PDO和准备好的陈述。

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

以下理论数据流是否足够,如果不是,您会建议哪些改进?

  1. 正确的表单验证客户端。
  2. 使用$_POST而不是$_GET
  3. 在 PHP 中,$variable = htmlentities($_POST['variable']);在数据库插入之前使用。
  4. usingPDO和prepared 语句,例如bindValue(':variable', $variable)
  5. 在输出时,echo htmlspecialchars($variable);用于防止 XSS 攻击。

两个相关问题:

  • 假设您在htmlentities()插入数据库之前使用数据。如果用户输入 say ,您如何还删除所有插入的垃圾<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)

提前感谢您对此的帮助。

4

1 回答 1

3

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

  1. “验证”数据客户端——你不想相信这个验证,因为你不应该相信来自客户端的任何东西,这样做是为了让用户体验更好。

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

  3. 将数据存储在数据库中 - 您将使用准备好的语句来保护自己免受 SQL 注入,但您不想以任何方式(不htmlentities或类似)操作数据。

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

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

于 2014-01-16T14:27:32.963 回答