我正在使用PDO的bindParam。
这是检查网站上每个GET变量的函数。更改后,它将回应它:
function Check_Get_Param($val){
$value1=addslashes($val);
$string1=htmlspecialchars($value1);
$string2=strip_tags($string1);
$string3=intval($string2);
return $string3;
}
这将输出结果:
Check_Get_Param($_GET['id']);
现在的想法是任何ID或 id =任何或 id =%
$_GET['id'] = %
将导致0
,因为%
不是整数。如何允许%
?
如何修改此功能或我可以过滤GET参数的任何其他功能,以便我可以阻止网络进样?
答案 0 :(得分:4)
你不需要这些程序来阻止sql注入,因为PDO的bindParam已经处理了这个问题。你只需要
$sth = $db->prepare('... id = ? ...');
$sth->bindParam(1, $_GET['id']);
$sth->execute();
答案 1 :(得分:0)
PHP 5(版本> = 5.2.0)具有一组方便的数据过滤功能。这些功能允许验证诸如电子邮件和URL之类的常见内容,否则这些内容需要复杂的正则表达式,而这些表达式并不总是有效。这些功能是filter_var(),filter_input(),filter_id()等。
这样您就不必通过$ _GET或$ _POST数组触摸原始输入。请参阅文档中提供的示例。
答案 2 :(得分:0)
轻松检查所需验证的特定功能可能是:
function validateID($id) {
return ($id == '%' || is_numeric($id));
}
然后你可以做这样的事情来允许数字或%
,但没有别的:
if(!validateID($_GET['id'])) {
die('Wrong parameter type - validation failed!');
}
$stmt->bindParam(1, $_GET['id']);