首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codeigniter XSS保护

Codeigniter XSS保护
EN

Stack Overflow用户
提问于 2012-02-13 23:49:49
回答 3查看 5.9K关注 0票数 2

在过去的几天里,我一直在研究codeigniter。它看起来很有希望,但几乎没有什么问题。全局的XSS保护一点也不安全,它太糟糕了!我一直在玩弄它,我肯定可以提出很多“糟糕的请求”。

codeigniter用户做些什么?把它关掉,创建他们自己的XSS保护?现有的codeigniter (或php)类可以帮助防止XSS攻击吗?

有时,当XSS保护“工作”并且代码找到匹配时,XSS保护似乎被剥离得太多。

任何帮助都是最好的!谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-14 00:52:32

根据我的经验,CI的XSS非常好--我遇到过这样的情况:它确实删除了我想要的东西,如果您不希望它出现,调试起来可能会很痛苦。我从来没有能够“轻松”地绕过它,也没有读过任何关于漏洞的文章( CI社区相当大)。

如果您非常担心,可以关闭CI的XSS保护,并使用“更全面”的过滤器,比如HTML Purifier --您可能还想阅读OWASP's XSS cheat sheet,因为清理输入只是XSS保护的一小部分。

票数 2
EN

Stack Overflow用户

发布于 2012-02-14 02:51:07

我没有打开全局XSS。一旦全局打开它,就不可能对单次使用实例关闭它,比如使用内容的微型MCE编辑器。我从字面上看过CI代码,发现它会重写$_POST、$_GET数据,如果XSS是全局打开的,那么数据就会被写入$_POST。

解决方案XSS全局= off

代码语言:javascript
复制
$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
票数 2
EN

Stack Overflow用户

发布于 2021-09-03 04:06:01

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

代码语言:javascript
复制
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];
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9263471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档