XSS攻击与防范小结

这篇博客的提纲如下:

一、故障梳理

二、故障解决方案

三、XSS小结

 

 

一、故障梳理

这要从最近出的一个故障说起。故障的过程大致如下:

数据流

 

A系统与B系统域名不同,A系统中的数据提交到A系统某个form表单,然后通过js函数提交到B系统后台,然后显示在B系统的IE浏览器上

这是整个数据流。

 

其中IE8开始,IE内置了XSS filter机制,当来源为跨站数据源,且数据源中含有疑似XSS攻击恶意数据(微软IE内置的正则来判断,例如,‘中文()’等)的时候,就会停止脚本的运行,直接跳转到空白页。

可以参考http://windows.microsoft.com/en-us/windows7/how-does-internet-explore-9-help-protect-me-from-cross-site-scripting-attacks   

 

本故障就是在A系统提交的数据中含有疑似XSS攻击的字符,导致IE误判,(别的浏览器都没事,IE就是个惹祸的怪胎。远离IE得永生!)无法将数据正确在B系统展示出来。展示了空白页。

 

二、故障解决方案

解决方案暂时想到的有两种:

1、在B系统的Response的Header里面加入标签X-XSS-Protection=0,阻止IE XSS filter生效。但是这样做有损系统安全性

2、在A系统提交的数据里面做XSS字符的过滤,将疑似XSS的字符从半角转换为全角字符。后面会有相应的代码实现

3、将数据的A系统进行彻底的编码(Base64等),然后在B系统进行相应的解码

 

这里选择方案2进行实现:

代码如下:

 

 public static String xssEncoder(String content){
        StringBuilder bulider=new StringBuilder();
        for(char c :content.toCharArray()){
            switch (c) {
                case '>':
                    bulider.append('>');// 全角大于号
                    break;
                case '<':
                    bulider.append('<');// 全角小于号
                    break;
                case '\'':
                    bulider.append('\\');
                    bulider.append('\'');
                    bulider.append('\\');
                    bulider.append('\'');
                    break;
                case '\"':
                    bulider.append('\\');
                    bulider.append('\"');// 全角双引号
                    break;
                case '&':
                    bulider.append('&');// 全角
                    break;
                case '\\':
                    bulider.append('\');// 全角斜线
                    break;
                case '#':
                    bulider.append('#');// 全角井号
                    break;
                case ':':
                    bulider.append(':');// 全角冒号
                    break;
                case '%':
                    bulider.append("\\\\%");
                    break;
                case '(':
                    bulider.append("(");
                    break;
                case ')':
                    bulider.append(")");
                    break;
                case ',':
                    bulider.append(",");
                    break;
                case '.':
                    bulider.append("。");
                    break;
                default:
                    bulider.append(c);
                    break;
            }
        }
        
        return bulider.toString();
    }

 

 

 

顺便提一下针对全站进行XSS防御的两种常用手段

1、配置Nginx的过滤正则脚本,对疑似XSS的脚本特征进行拦截

2、在系统配置拦截器,针对XSS数据进行清洗过滤,如http://my.oschina.net/hermer/blog/152834

 

三、XSS 小结

      这部分内容太多,做不好讲述。有很多web安全的书籍都讲得非常不错。这里就不泛泛而谈了

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值