sql 注入 - 我应该先做什么,绑定参数或应用过滤器?.PHP


sql injection - What should I do first, bind a parameter or apply a filter? PHP

例如,我需要使用数字进行基于 url 的查询的输入

所以我想使用 ctype_digit 来确保查询只是数字,如果我为了安全起见而绑定参数,我应该先做哪一个,还是两者都做是多余的?

目前在垃圾场上实现了这个(我懒洋洋地放在一起)

我从解析的网址绑定参数然后在结果中(在绑定部分之后)

如果 id 是数字,我会显示该条目,这听起来很愚蠢,我知道我到底在想什么?我不知道。

我应该在绑定它之前ctype_digit它,或者根本不做......我不明白bind_param做什么,我看了手册...

将变量作为参数绑定到预准备语句

这就是它所做的一切,没有过滤?

正确的工作流程是:

  1. 过滤输入数据($_GET, $_POST, 文件...
  2. 验证输入
  3. 成功插入/更新/删除到数据库
  4. 其他方式通常显示错误消息

如@venca所述,您需要:
1. 过滤输入数据
2. 验证输入
3. 执行您的交易。

始终从过滤输入开始。(可选)可以将筛选的输入结果与原始输入的结果进行比较,如果它们不同,则通知用户他们输入了错误数据。

要回答有关将变量绑定到预准备语句的问题,请首先了解什么是预准备语句。预准备语句是缺少参数的 SQL 字符串,例如:

SELECT Name FROM employees WHERE ID='?';在这种情况下,如果用户要添加 SQL 注入,则整个注入将被视为要查找的字符串,而不是 SQL 命令的一部分。有关这方面的一些简单信息,请参阅如何防止 PHP 中的 SQL 注入?此外,还有一些教程可以帮助您入门,例如 w3schools 上关于如何在 PHP 中使用预准备语句的简短教程。