将隐藏的输入值清理为始终为整数

时间:2017-02-21 20:31:22

标签: php

我有一个隐藏输入的表单,它总是有一个整数作为代码中自动分配的值。

<form action="">
    <input name="pageNum" type="hidden" value="1">
</form>

如何将该值清理为始终为给定的整数?即使有人通过在请求中的值之后添加'来改变请求,就像使用sql注入一样。因为实际情况确实如此,有人在做了一些测试后将其报告为sql注入安全事件。但是1只会变成1\&#39;并且会破坏我的代码,因为{1}}&#39;在1中的数组中不存在。

1\

我有办法实现这个目标吗?因为这使我在我的代码中进一步降低内部服务器错误,使人们认为它是一个SQL注入安全漏洞。

5 个答案:

答案 0 :(得分:0)

你可以尝试intval($ pageNumber)

答案 1 :(得分:0)

$pageNumber = "1\'";
preg_match("|\d+|", $pageNumber, $number);
var_dump($number);

这只会提取字符串中的数值并将其放在$ number中。

答案 2 :(得分:0)

$_POST值始终是字符串字符串,因此is_int()无法正常工作。只需查看is_numeric()

即可
if (!is_numeric($pageNumber)) {    // $pageNumber = "1\'" for this example
    $pageNumber = '1';
}

但是既然你知道它应该是一个整数,如果它以数字开头,则会得到正确的数字,如果不是,则会得到0

$pageNumber = (int)$_POST['pageNum'];

您无法从乱码中可靠地解析正确的页码。此外,如果有人试图破解您的服务器,您不应该关心给他们正确的页码。

答案 3 :(得分:0)

您可以使用filter_var函数。例如: filter_var($ your_integer_value,FILTER_VALIDATE_INT,$ options);

请参阅此链接:http://php.net/manual/en/function.filter-var.php

答案 4 :(得分:-1)

解析乱码中的数字有点棘手,因为如果文本中还有其他数字,您将无法知道要解析的数字。 (例如1\2,你会解析#1还是2?)

最简单的解决方案是,如果无法解析,页面默认为整数。

例如:

if (!is_int($pageNum))
    $pageNum = 1;

因此,如果有人篡改POST变量,他们就不会做任何棘手的事情,因为它只是默认为1。