Codeigniter-不允许的关键字符,调整代码

Codeigniter-不允许的关键字符,调整代码,codeigniter,cookies,google-analytics,Codeigniter,Cookies,Google Analytics,我们的网站遭到ddos攻击,并发送了一些格式错误的cookie。我们使用CodeIgniter框架。由于要求我们的用户清除cookie是不合理的,我想知道更改核心中的以下功能会有什么后果。产生错误的Cookie的格式如下: __utmt_~1 最初的功能是: if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str)) { exit('Disallowed Key Characters.'); } 如果我将其更改为允许a~,可能会有什么副作用?我知道

我们的网站遭到ddos攻击,并发送了一些格式错误的cookie。我们使用CodeIgniter框架。由于要求我们的用户清除cookie是不合理的,我想知道更改核心中的以下功能会有什么后果。产生错误的Cookie的格式如下:

__utmt_~1
最初的功能是:

if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str))
{
    exit('Disallowed Key Characters.');
}
如果我将其更改为允许a~,可能会有什么副作用?我知道这是为了防止恶意用户,我想确保这不会产生不良影响

if ( ! preg_match("/^[a-z0-9:_\/-\~]+$/i", $str))
{
    exit('Disallowed Key Characters.');
} 
在本文中,@Kristian解释了改变正则表达式的风险,正如他所说:

我有一种感觉,他们保护过度仅仅是因为CodeIgniter的应用如此广泛,他们需要保护自己不受他们自己还没有想到的东西的影响,因为他们的用户可能比CodeIgniter的开发人员更不了解这种攻击


这是我的方法,它解决了问题并保持了CI核心的原始性

只需将此代码放在application/core/MY_Input.php文件中

如果$config['subclass\u prefix']不是'MY\u',请重命名该类和php文件

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class MY_Input extends CI_Input {

    function _sanitize_globals() {

        // Avoid error come from cookie __utmt_~1, it set by Google Analatics
        foreach($_COOKIE as $key => $val) {
            if (strpos($key, '~') !== false) {
                unset($_COOKIE[$key]);
            }
        }

        parent::_sanitize_globals();
    }
}