消毒一个隐藏的输入值,以始终成为整数

  • 本文关键字:整数 隐藏 一个 php
  • 更新时间 :
  • 英文 :


我有一个带有隐藏输入的表单,该表单总是将整数作为一个自动分配的值。

<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。

最新更新