我有一个带有隐藏输入的表单,该表单总是将整数作为一个自动分配的值。
<form action="">
<input name="pageNum" type="hidden" value="1">
</form>
我如何将该价值消毒以始终为给定的整数?即使某人像您一样使用SQL注入的请求时,在请求中的值之后添加'
。因为实际上是这种情况,所以有人在进行了一些测试后将其报告为SQL注射安全事件。但是 1
只是变成 1
'并破坏我的代码,因为 1
'不存在1个数组中。
$pageNumber = $_POST['pageNum'];
if (!is_int($pageNumber)) { // $pageNumber = "1'" for this example
// what can I do to make it 1 again?
}
有什么办法可以实现这一目标?因为这使我在代码中进一步遇到了内部服务器错误,这使人们认为这是SQL Indection Security漏洞。
您可以尝试Intval($ Pagenumber)
$pageNumber = "1'";
preg_match("|d+|", $pageNumber, $number);
var_dump($number);
这只会在字符串中提取数值,然后将其放入$数字中。
$_POST
值始终键入字符串,因此is_int()
无法正常工作。只需检查is_numeric()
:
if (!is_numeric($pageNumber)) { // $pageNumber = "1'" for this example
$pageNumber = '1';
}
但是,由于您知道它应该是一个整数,因此如果它以数字开头或0
(如果不是),则可以获得适当的数字:
$pageNumber = (int)$_POST['pageNum'];
您无法从Gibberish中可靠地解析正确的页码。另外,如果有人试图破解您的服务器,您不应该在给他们正确的页码。
您可以使用filter_var函数。例如:filter_var($ your_integer_value,filter_validate_int,$ options);
请参阅此链接:http://php.net/manual/en/function.filter-var.php
解析gibberish的数字有点棘手,因为如果文本中还有其他数字,您将不知道要解析哪个数字。(例如12
,您可以#哪个#分析?1或2?)
最简单的解决方案是,如果您不能解析,则将页面默认为整数。
例如:
if (!is_int($pageNum))
$pageNum = 1;
因此,如果有人篡改后变量,他们将无法做任何棘手的事情,因为它默认为1。