PHP-安全地捕获$ _GET方法

时间:2019-04-10 20:09:29

标签: php database pdo get

我最近开始学习PHP和PDO。长期目标是能够使用details.php方法捕获$_GET或某种形式的变化,从而在数据库的单个?page=id页面上动态显示内容。< / p>

为了比较?page=id,我的计划是将其保存到变量($pageId等)中,然后将该变量与数据库中的记录进行比较。如果记录存在,请抓住该记录,但是我对准备好的语句位有点挂了。

当我用get方法抓住?page=id时,我会使用准备好的语句来开始查询,但是在处理查询之前,我是否应该做任何事情来清理正在记录的内容?

3 个答案:

答案 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数字传递过滤器函数可以是123,但也可以是1e5,就数字而言有效,但不是通常在第id行的情况下使用id。另一件事是,某些数字可能使用.来分隔小数,而其他数字则使用,,并且根据国家/地区和这些符号的财务解释,两者均有效。在某些县,.是千位分隔符,因此1k = 1.000。 这就是为什么您不应该中继100%的过滤器功能,而是将它们视为自己的功能的一部分。