我有一个带有隐藏输入的表单,它将始终有一个整数作为代码中自动分配的值。
<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注入安全漏洞。
发布于 2017-02-22 04:37:03
您可以尝试intval($pageNumber)
发布于 2017-02-22 04:38:48
$pageNumber = "1\'";
preg_match("|\d+|", $pageNumber, $number);
var_dump($number);这将只提取字符串中的数值,并将其放入$number中。
发布于 2017-02-22 05:04:41
$_POST的值总是字符串类型,所以is_int()不起作用。只需检查is_numeric()
if (!is_numeric($pageNumber)) { // $pageNumber = "1\'" for this example
$pageNumber = '1';
}但是,由于您知道它应该是一个整数,因此如果它以数字开头,则将获得正确的数字;如果不是,则将获得0:
$pageNumber = (int)$_POST['pageNum'];你不能从胡言乱语中可靠地解析出正确的页码。另外,如果有人试图入侵你的服务器,你不应该在意给他们正确的页码。
https://stackoverflow.com/questions/42377369
复制相似问题