例如,我需要使用数字进行基于 url 的查询的输入
所以我想使用 ctype_digit
来确保查询只是数字,如果我为了安全起见而绑定参数,我应该先做哪一个,还是两者都做是多余的?
目前在垃圾场上实现了这个(我懒洋洋地放在一起)
我从解析的网址绑定参数然后在结果中(在绑定部分之后)
如果 id 是数字,我会显示该条目,这听起来很愚蠢,我知道我到底在想什么?我不知道。
我应该在绑定它之前ctype_digit它,或者根本不做......我不明白bind_param做什么,我看了手册...
将变量作为参数绑定到预准备语句
这就是它所做的一切,没有过滤?
正确的工作流程是:
- 过滤输入数据($_GET, $_POST, 文件...
- 验证输入
- 成功插入/更新/删除到数据库 时
- 其他方式通常显示错误消息
如@venca所述,您需要:
1. 过滤输入数据
2. 验证输入
3. 执行您的交易。
始终从过滤输入开始。(可选)可以将筛选的输入结果与原始输入的结果进行比较,如果它们不同,则通知用户他们输入了错误数据。
要回答有关将变量绑定到预准备语句的问题,请首先了解什么是预准备语句。预准备语句是缺少参数的 SQL 字符串,例如:
SELECT Name FROM employees WHERE ID='?';
在这种情况下,如果用户要添加 SQL 注入,则整个注入将被视为要查找的字符串,而不是 SQL 命令的一部分。有关这方面的一些简单信息,请参阅如何防止 PHP 中的 SQL 注入?此外,还有一些教程可以帮助您入门,例如 w3schools 上关于如何在 PHP 中使用预准备语句的简短教程。