用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5186|回复: 8
收起左侧

[讨论/交流] 一起来写一个高效的xss_clean,是否可以

[复制链接]
发表于 2008-6-26 09:28:31 | 显示全部楼层 |阅读模式
xss_clean的效率实在不敢恭维,根本点还是算法,大家是否有兴趣讨论一个快速高效的算法。
比如:安全的clean_filename绝不是象CI中的那些用数组一一清理,以下函数要比CI中的更加有效与安全:
PHP复制代码
function clean_file_name( &$file_name )
 {
  $file_name = strtolower( trim($file_name) );
 
  // Replace spaces with _
  $file_name = preg_replace( '/[\s]+/', '_', $file_name );
 
  // Remove all chars except a-z0-9-_.
  $file_name = preg_replace( '/[^a-z0-9'-_'.]+/', '', $file_name );
  if ($file_name[0] == '.') { // first char is dot
   $file_name = "_".$file_name;
  }
  if (!strlen($file_name)) { // if all chars were stripped out by regex
   $file_name = 'uploaded_file';
  }
  return $file_name;
 }
复制代码

评分

参与人数 1威望 +5 收起 理由
Hex + 5 原创内容

查看全部评分

发表于 2008-6-26 09:37:54 | 显示全部楼层
呵呵,我也是觉得 CI 的 XSS 过滤效率有问题。
这么好的代码我先学习一下!
发表于 2008-6-26 11:54:05 | 显示全部楼层
先科普一下xss是啥好不?
发表于 2008-6-26 12:55:21 | 显示全部楼层
XSS = 跨站脚本攻击
 楼主| 发表于 2008-6-26 16:56:00 | 显示全部楼层

查看了一下帮助,发现其实根本没必要

因为htmlspecialchars从PHP 4.3.0 及其后续版本支持如下字符集。 已支持字符集 字符集 别名 描述
ISO-8859-1 ISO8859-1 西欧,Latin-1  
ISO-8859-15 ISO8859-15 西欧,Latin-9。增加了 Latin-1(ISO-8859-1)中缺少的欧元符号、法国及芬兰字母。  
UTF-8   ASCII 兼容多字节 8-bit Unicode。  
cp866 ibm866, 866 DOS-特有的 Cyrillic 字母字符集。PHP 4.3.2 开始支持该字符集。  
cp1251 Windows-1251, win-1251, 1251 Windows-特有的 Cyrillic 字母字符集。PHP 4.3.2 开始支持该字符集。  
cp1252 Windows-1252, 1252 Windows 对于西欧特有的字符集。  
KOI8-R koi8-ru, koi8r 俄文。PHP 4.3.2 开始支持该字符集。  
BIG5 950 繁体中文,主要用于中国台湾。  
GB2312 936 简体中文,国际标准字符集。  
BIG5-HKSCS   繁体中文,Big5 的延伸,主要用于香港。  
Shift_JIS SJIS, 932 日文。  
EUC-JP EUCJP 日文。  
对我们而言,无论是GB2312,还是UTF8,直接用strip_tags 加上 htmlspecialchars 即可
发表于 2008-6-26 21:09:16 | 显示全部楼层
学习了一下下,这东西是不是能纯在客户端就能得到cookie啥的?
发表于 2011-2-27 13:18:15 | 显示全部楼层
这个可以过滤 'or'='or'
and 1=1 是吧?
发表于 2011-2-27 20:47:56 | 显示全部楼层
回复 7# skeay


    你这个不是 XSS 攻击,你这个是 SQL 注入,这个只需要转义相关字符即可,AR 类会帮你转义的。
发表于 2011-2-27 21:37:28 | 显示全部楼层
哦 是这样啊

本版积分规则