Codeigniter XSS保护

klr1opcd  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(128)

过去几天我一直在研究codegliiter。它看起来很有前途,但也有一些问题。全球XSS保护一点也不安全,它很糟糕!我一直在玩它,我肯定可以提出很多“坏请求”
codeigniter的用户会做什么呢?只是把它关掉,然后创建他们自己的XSS保护吗?有没有任何现有的codeigniter(或php)类可以帮助防止XSS攻击?
看起来XSS保护有时也会剥离太多,当它“工作”并且代码找到匹配时。
任何帮助都是最好的!谢谢!

sq1bmfud

sq1bmfud1#

从我的经验来看,CI的XSS相当不错--我遇到过这样的情况,它确实删除了我想要的东西,如果您没有预料到的话,调试起来会很痛苦。我从来没有能够“轻松地”绕过它,也没有读到过任何漏洞(CI社区相当大)。
如果您非常担心,可以关闭CI的XSS保护,并使用“更”全面的过滤器,如HTML Purifier--您可能还希望读取OWASP's XSS cheat sheet,因为清除输入只是XSS保护的一小部分。

cx6n0qe3

cx6n0qe32#

我没有打开全局XSS。一旦它被全局打开,它就不可能关闭单次使用的示例,比如使用一个微型MCE编辑器的内容。我已经通过CI代码,发现它重写$_POST,$_GET数据,如果XSS是全局打开的,那么数据被写入到$_POST剥离。
解决方案XSS全局=关闭

$this->input->post('varname',true); //for clean data
$this->input->post('varname',false); //for something you want to clean manually
$varname=filter_var($_POST['varname']); //raw and old school
fkaflof6

fkaflof63#

可以使用htmlspecialchars($input)来防止用户输入和kiddo注入xss。

bogh5gae

bogh5gae4#

我已经覆盖了在RestController中的post函数,像这样对XSS进行清理,并保存XSS发送者试图在攻击表中进行黑客攻击:

public function post($key = NULL, $default_value="" , $xss_clean = TRUE)
{
    if ($key === NULL)
    {
        return $this->_post_args;
    }
    $val =  $this->input->get_post($key, $xss_clean);
    if(!is_array($val))
        $val =  $this->checkvar($val,'string','','')[1];
    if($val == NULL || $val == "" || !isset($val))
        return $default_value;
    else
        return $val;
}

function checkvar($var,$varmode,$varfilter,$defultvar)
{
    if($var==null||$var==''){
        return [1,$defultvar];
    }else{
        $ttvar=$var;

        $var =strtolower($var);
        $tvar=$var;

        $var= preg_replace('~<script~', '<!--',$var);
        $var= preg_replace('~</script>~', '-->',$var);
        $var= preg_replace('~delete *from~', '',$var);
        $var= preg_replace('~drop *table~', '',$var);
        $var= preg_replace('~insert *into~', '',$var);
        $var= preg_replace('~or *1 *= *1~', '',$var);
        $var= preg_replace('~select *from~', '',$var);

        if($var!=$tvar){
            $query="INSERT INTO attack_tb( attack_ip, attack_text, attack_timestamp) VALUES
                        ( '".get_client_ip()."', '".$ttvar."', now() )";
            $CI = get_instance();
            $CI->load->model('B_db');
            $result=$CI->B_db->run_query($query);
        }else{
            $var=$ttvar;
        }
        $var=filter_var($var, FILTER_SANITIZE_STRING);

        if($varmode=='string')
        {
            if($varfilter==''){
                return [1,$var];
            }else if($varfilter=='email'){
                if(filter_var($var, FILTER_VALIDATE_EMAIL))
                {   return [1,$var];}else{  return [0,$var];}
            }else if($varfilter=='ip'){
                if(filter_var($var, FILTER_VALIDATE_IP))
                {return [1,$var];}else{ return [0,$var];}
            }
        }else if($varmode=='int'){
            if(is_numeric ($var)){
                return [1,$var];
            }else{
                return [0,$var];
            }
        }
    }
}

相关问题