【问题标题】:Prevent Arrays as Field Names in codeigniter在 codeigniter 中防止数组作为字段名称
【发布时间】:2014-10-26 13:26:17
【问题描述】:

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

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

【问题讨论】:

    标签: php arrays html codeigniter


    【解决方案1】:

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

    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;
    }
    

    希望这对面临类似问题的人有所帮助!

    祝大家今天好!

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 2021-12-26
      • 2017-11-10
      相关资源
      最近更新 更多