【发布时间】:2014-01-16 13:02:00
【问题描述】:
这可能会被标记为重复,但在我的辩护中,我已经搜索了一段时间,我发现的很多信息最多与 mysql 或 mysqli 有关,或者不完整.我想要一个全面的、最新的答案,它会影响使用PDO 和准备好的语句。
在数据通过应用程序时处理数据的正确方法是什么。
以下理论数据流是否足够,如果不够,您会建议哪些改进?
- 正确的表单验证客户端。
- 使用
$_POST而不是$_GET - 在 PHP 中,在插入数据库之前使用
$variable = htmlentities($_POST['variable']);。 - 使用
PDO和准备好的语句,例如:bindValue(':variable', $variable); - 在输出时,使用
echo htmlspecialchars($variable);防止XSS 攻击。
两个相关问题:
- 假设您在插入数据库之前对数据使用
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)
在此先感谢您的帮助。
【问题讨论】:
-
第 3 步是不必要的,也是错误的。在第 5 步中,
htmlspecialchars仅适用于 HTML 输出——它可以概括为“以适合输出上下文的方式编码输出——htmlspecialchars用于 HTML,json_encode用于 JSON,XML 用于 XML 的文档方法等”。 -
第 2 步可能有问题(区别在于语义,而非技术),但第 3 步是完全错误的。
-
@Dcoder 36 - 处理步骤 3 的适当方法是什么,或者我想我应该说,步骤 3 应该是什么?
-
不需要任何步骤 3。将您的数据作为绑定变量直接传递给 PDO,它将为您安全地存储它。
标签: php mysql pdo database-security