在过去的几天里,我一直在研究codeigniter。它看起来很有希望,但几乎没有什么问题。全局的XSS保护一点也不安全,它太糟糕了!我一直在玩弄它,我肯定可以提出很多“糟糕的请求”。
codeigniter用户做些什么?把它关掉,创建他们自己的XSS保护?现有的codeigniter (或php)类可以帮助防止XSS攻击吗?
有时,当XSS保护“工作”并且代码找到匹配时,XSS保护似乎被剥离得太多。
任何帮助都是最好的!谢谢!
发布于 2012-02-14 00:52:32
根据我的经验,CI的XSS非常好--我遇到过这样的情况:它确实删除了我想要的东西,如果您不希望它出现,调试起来可能会很痛苦。我从来没有能够“轻松”地绕过它,也没有读过任何关于漏洞的文章( CI社区相当大)。
如果您非常担心,可以关闭CI的XSS保护,并使用“更全面”的过滤器,比如HTML Purifier --您可能还想阅读OWASP's XSS cheat sheet,因为清理输入只是XSS保护的一小部分。
发布于 2012-02-14 02:51:07
我没有打开全局XSS。一旦全局打开它,就不可能对单次使用实例关闭它,比如使用内容的微型MCE编辑器。我从字面上看过CI代码,发现它会重写$_POST、$_GET数据,如果XSS是全局打开的,那么数据就会被写入$_POST。
解决方案XSS全局= off
$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发布于 2021-09-03 04:06:01
我已经像这样覆盖了RestController中的post函数,以清理和保存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];
}
}
}
}https://stackoverflow.com/questions/9263471
复制相似问题