我最近开始学习PHP和PDO。长期目标是能够使用details.php
方法捕获$_GET
或某种形式的变化,从而在数据库的单个?page=id
页面上动态显示内容。< / p>
为了比较?page=id
,我的计划是将其保存到变量($pageId
等)中,然后将该变量与数据库中的记录进行比较。如果记录存在,请抓住该记录,但是我对准备好的语句位有点挂了。
当我用get方法抓住?page=id
时,我会使用准备好的语句来开始查询,但是在处理查询之前,我是否应该做任何事情来清理正在记录的内容?
答案 0 :(得分:1)
使用PDO预处理语句绑定用户输入中的值或变量时,您不需要对输入进行清理(以防止在查询中注入SQL)。但是,最好限制其内容。
例如,假设id
输入为整数,则可以使用:
$getId = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
https://www.php.net/manual/en/function.filter-input.php
现在您确定它是整数。
此外,您可以将其限制为有效的整数,例如:
if (($getId > 0) && ($getId < PHP_INT_MAX)) {
.... proceed ....
}
换句话说,总是尽可能地限制用户输入。
答案 1 :(得分:-1)
您可以使用php清理功能来清理GET参数随附的任何数据。
例如,您的$ _GET值等于123,并且您想要对其进行过滤和清理。
采用:
TextPost
或者您可以通过以下方式检查来自$ _GET的值是否为数字,并且> 0:
$number = $_GET['number'];
filter_var($number, FILTER_SANITIZE_NUMBER_INT);
答案 2 :(得分:-1)
请参见sanitize functions。请记住,如果您将任何用户传递的信息保存到日志中,然后在浏览器中显示(即通过管理面板),则有人可能会向您传递您的恶意JavaScript,您的浏览器将执行该JavaScript。如果浏览器登录到管理面板,则可能导致安全问题。
如果您问这样的问题,我会指示您也OWASP来熟悉其他安全风险。
Google还提供了消毒和验证之间的区别。
您可能会发现有用的一些过滤器功能是here,但不仅限于此。例如,有效的id
数字传递过滤器函数可以是1
,2
,3
,但也可以是1e5
,就数字而言有效,但不是通常在第id
行的情况下使用id
。另一件事是,某些数字可能使用.
来分隔小数,而其他数字则使用,
,并且根据国家/地区和这些符号的财务解释,两者均有效。在某些县,.
是千位分隔符,因此1k
= 1.000
。
这就是为什么您不应该中继100%的过滤器功能,而是将它们视为自己的功能的一部分。