技术杂谈
网络新概念,云计算、大数据、O2O、电商。。。。
网络新概念,云计算、大数据、O2O、电商。。。。
2018-09-25 17:10:11
一、360提示[严重]Ecshop会员中心XSS漏洞修复方案
需要修改文件 user.php 代码 28行 $back_act=''; 下新增 $getfilter = "\\<.+javascript:window\\[.{1}\\\\x|<.*=(&#\\d+?;?)+?>|<.*(data|src)=data:text\\/html.*>|\\b(alert\\(|confirm\\(|expression\\(|prompt\\(|benchmark\s*?\(.*\)|sleep\s*?\(.*\)|load_file\s*?\\()|<[a-z]+?\\b[^>]*?\\bon([a-z]{4,})\s*?=|^\\+\\/v(8|9)|\\b(and|or)\\b\\s*?([\\(\\)'\"\\d]+?=[\\(\\)'\"\\d]+?|[\\(\\)'\"a-zA-Z]+?=[\\(\\)'\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.*\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)|UPDATE\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE)@{0,2}(\\(.+\\)|\\s+?.+?\\s+?|(`|'|\").*?(`|'|\"))FROM(\\(.+\\)|\\s+?.+?|(`|'|\").*?(`|'|\"))|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; 搜索: if (!empty($_SERVER['QUERY_STRING'])) 用以下替换 if (!empty($_SERVER['QUERY_STRING'])) { if (preg_match("/".$getfilter."/is",$_SERVER['QUERY_STRING'])==1){ $back_act = ''; }else{ $back_act = 'user.php?' . strip_tags($_SERVER['QUERY_STRING']); } }
二、ecshop的article_cat.php文件xss跨站脚本攻击漏洞 ECSHOP SQL注入漏洞,用 str_replace() 函数 对 参数 $keywords 和 $search_url 进行字符过滤,需要过滤的字符有:' " \ < > & * ;
article_cat.php /* 获得文章列表 */ if (isset($_REQUEST['keywords'])) { $keywords = addslashes(htmlspecialchars(urldecode(trim($_REQUEST['keywords'])))); $pager['search']['keywords'] = $keywords; $search_url = substr(strrchr($_POST['cur_url'], '/'), 1); //增加过滤,compile是ecshop内置的替换函数 $keywords=compile_str($keywords); $search_url=compile_str($search_url);
三、category.php漏洞
90行 //过滤输入编码 $keyword=compile_str($keyword); /*------------------------------------------------------ */ //-- PROCESSOR /*------------------------------------------------------ */
备注:
1. 过滤用户输入的内容,检查用户输入的内容中是否有非法内容。如<>(尖括号)、"(引号)、 '(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。
2. 严格控制输出
可以利用下面这些函数对出现xss漏洞的参数进行过滤
1、htmlspecialchars() 函数,用于转义处理在页面上显示的文本。
2、htmlentities() 函数,用于转义处理在页面上显示的文本。
3、strip_tags() 函数,过滤掉输入、输出里面的恶意标签。
4、header() 函数,使用header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览。
5、urlencode() 函数,用于输出处理字符型参数带入页面链接中。
6、intval() 函数用于处理数值型参数输出页面中。
7、自定义函数,在大多情况下,要使用一些常用的 html 标签,以美化页面显示,如留言、小纸条。那么在这样的情况下,要采用白名单的方法使用合法的标签显示,过滤掉非法的字符。
各语言示例:
PHP的htmlentities()或是htmlspecialchars()。
Python的cgi.escape()。
ASP的Server.HTMLEncode()。
ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
Java的xssprotect(Open Source Library)。
Node.js的node-validator。