我有一个隐藏输入的表单,它总是有一个整数作为代码中自动分配的值。
<form action="">
<input name="pageNum" type="hidden" value="1">
</form>
如何将该值清理为始终为给定的整数?即使有人通过在请求中的值之后添加'
来改变请求,就像使用sql注入一样。因为实际情况确实如此,有人在做了一些测试后将其报告为sql注入安全事件。但是1
只会变成1\
&#39;并且会破坏我的代码,因为{1}}&#39;在1中的数组中不存在。
1\
我有办法实现这个目标吗?因为这使我在我的代码中进一步降低内部服务器错误,使人们认为它是一个SQL注入安全漏洞。
答案 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);
答案 4 :(得分:-1)
解析乱码中的数字有点棘手,因为如果文本中还有其他数字,您将无法知道要解析的数字。 (例如1\2
,你会解析#1还是2?)
最简单的解决方案是,如果无法解析,页面默认为整数。
例如:
if (!is_int($pageNum))
$pageNum = 1;
因此,如果有人篡改POST变量,他们就不会做任何棘手的事情,因为它只是默认为1。