SWFupload 2.2.x的XSS漏洞及解决方案
SWFUpload 是一款优秀的 Flash 上传控件,它可以非常好的增强 Web 端程序的用户上传体验。SWFUpload 自由灵活的 JavaScript 接口允许开发者自定义包括 HTML/CSS 在内的几乎所有 UI 样式,被广泛运用在大量站点的上传模块中,如 Youtube 和 WordPress 。
此漏洞可能导致严重的类 XSS 安全隐患。由于官方开发近乎停滞,故我们建议在正式项目中使用了此组件的开发者通过如下方式解决本安全隐患(二选一):
1)将 SWFUpload 替换成其他安全的上传组件,如 jQuery File Upload 和游子自行开发的图片上传组件。
2)点击此处下载修正、编译后后的 swfupload.swf 文件,然后替换掉目前你在项目中使用的 swfupload.swf 文件。
或者下载 swfupload.zip 下载此文件,覆盖原文件。
修正代码的改动只有一行,就是将危险字符进行简单过滤
修正后的完整项目代码,请前往游子 Github 项目查看。
解决方法:
1.在表单提交或者url参数传递前,对需要的参数进行过滤
2.过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出
可以利用下面这些函数对出现xss漏洞的参数进行过滤
(1)htmlspecialchars() 函数,用于转义处理在页面上显示的文本。
(2)htmlentities() 函数,用于转义处理在页面上显示的文本。
(3)strip_tags() 函数,过滤掉输入、输出里面的恶意标签。
(4)header() 函数,使用header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览。
(5)urlencode() 函数,用于输出处理字符型参数带入页面链接中。
(6)intval() 函数用于处理数值型参数输出页面中。
(7)自定义函数,在大多情况下,要使用一些常用的 html 标签,以美化页面显示,如留言、小纸条。那么在这样的情况下,要采用白名单的方法使用合法的标签显示,过滤掉非法的字符。