简单的参数检查功能,这里只需要允许%

时间:2014-06-10 02:48:35

标签: php mysql

我正在使用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参数的任何其他功能,以便我可以阻止网络进样?

3 个答案:

答案 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']);