我有GET []输入,并希望进行验证。输入数据始终是一个数字。架构。我想确保传递号和适当的数量 - 不要抛出sql查询。
此刻我正在使用程序
$cc = $_GET['cc'];
if ($cc=='') $cc='9012';$find=array("..", "/", "\\");
$replace=array("", "", "");
$cc=str_replace($find, $replace, $cc);
$eic = $_GET['eic'];
.... ect.
// where f.ex. 9012 is an real existing data (in dbase) to generate sucure sql question
GET []变量数据模式
$_GET[$cc] - always 4 digits
$_GET[$eic] - always 4 digits
$_GET[$iy] - always 4 digits
$_GET[$ir] - always 1 digit
你能告诉我一个更好的方法来保护我的GET吗?
答案 0 :(得分:1)
如果你得到的查询总是一个数字,你可以使用PHP中的intval()函数来确保它是一个int。
$eic = intval($_GET['eic']);
答案 1 :(得分:0)
您可以使用intval()
强制数值。
但是,您不能使用此方法表示具有前导0的值,例如0123
。
如果您没有带前导零的值,请使用:
<?php
$_GET['cc'] = intval($_GET['cc']);
strlen($_GET['cc']) == 4 ? $_GET['cc'] : $_GET['cc'] = 0; // Replace 0 with default/error value
// Repeat the steps above for all parameters...
?>
答案 2 :(得分:0)
变量中的位数变化导致查询
嗯,验证的全部内容是您“验证”数据,并且在数据未经过验证的情况下甚至不会打扰您的SQL数据库。你为什么要打扰执行一个你知道无效的查询呢?
我不同意使用intval()
进行验证。使用intval()
,您将强制更改用户输入的值,这不是真正的验证。更好的方法是使用is_int()
代替。
为了安全起见?没有什么能比“准备好的陈述”更胜一筹了