阻止数组作为代码点火器中的字段名


Prevent Arrays as Field Names in codeigniter

我使用的是codeigniter 2.xx,我发现在以html形式将数组作为字段名传递时,会引发php和数据库错误。这是一个严重的漏洞,如果用户使用chrome html调试工具进行同样的操作,该怎么办?它可能会导致网站的安全漏洞!所以,我一直在寻找一种方法来关闭默认情况下接受codeigniter中的Arrays作为Field Names,但在任何地方都找不到!

核心功能是否有任何变通方法,使form_validation、set_value()函数和数据库驱动程序不会接受字段名称中的数组,除非它是为它编程的?

好吧,伙计们,我的问题没有得到任何回应,所以我想出了一个变通办法。我做了这个小函数,它可以摆脱输入数组注入。

1) 创建库文件或模型。将其导入到要进行此验证的控制器中。

2) 将以下代码粘贴到您刚刚制作的模型或库中:

    /*
 * Description: Checks for the array attacks in the input forms.
 * @param $allowedArrayInputs, the input field name which may contain array values
 * @param $method, post, get or request.
 * @return boolean, in case no conflicts is detected else invoke error.
 * */
public function array_inputs ($allowedArrayInputs = array (), $method = 'post') {
    if ($method == 'request') {
        $method_param = $_REQUEST;
    }
    elseif ($method == 'get') {
        $method_param = $_GET;
    }
    else {
        $method_param = $_POST;
    }
    foreach ($method_param as $key => $val2) {
        if (is_array($val2)) {
            if ($allowedArrayInputs && is_array($allowedArrayInputs)) {
                if (in_array($key, array ( 'confirm_password' ))) {
                    continue;
                }
            }
            show_error('User input was invalid. Try again!');
            exit;
        }
    }
    return true;
}

希望这能帮助到面临类似问题的人!

祝大家愉快!