网站的安全校验

问题概述

XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。             

------来着百度百科

 

注入举例:

用户在系统可以进行输入数据的地方如:用户名用户直接把名字编辑为:

<script>alert(1)</script>

那么所有展现该用户名字的页面都会出现一个提示对话框。

如何防止

首先我们要了解数据的流向:

用户界面中输入数据----经过项目的拦截器过滤器后台业务处理通过getParameter等类似方法获取参数---保存数据库-----界面显示

 

第一个环节处理:

用户界面中输入在所有页面提交位置过滤把特殊字符转义。

不太现实工作量大,且用户也可以修改提交的数据完全无法控制。

第二个环节处理:

拦截器控制

首先我们想到的是定义个过滤器在web.xml中配置然后在过滤器中得到用户输入的参数,然后对其进行转义处理,然后重新设置Parameter参数。但是很快你就会发现Parameter参数是只读的不允许修改不信你自己试下。

 

(推荐下面的这个方法)

如果用了jfinal框架或者你的代码已经完成不想去做太大修改。

其实可以这样重写getParametergetParameterValuesgetParameterMap的方法

步骤一:

定义自己的HttpServletRequestWrapper


对用户输入的值调用自定义的check方法进行转义

Uncheck 方法对外提供,因为这种方式把用户所有的输入参数都进行了转义,但是问题来了有的地方确实不需要转义例如cms系统中有些文章内容可能就是一些html。针对这种情况可以在业务处理中对转义后的内容调用uncheck进行还原。

步骤二:

定义自己的过滤器


让自己的HttpServletRequestWrapper去获取用户的参数输入

步骤三:

配置web.xml

web.xml中配置一个过滤器要放在前面

 

完成。

 

第三个环节处理:

业务处理

requestgetParametergetParameterValuesgetParameterMap做一次二次封装这个方法很容易实现。

如果你项目已经完成想加入安全校验这样就改动地方就太多了。

 

第四个环节处理:

在保存数据库时候处理例如jfinal框架可以重写modelset方法对值进行转义可以扩展一个接口 getUncheck()获取当前model不需要转义的属性名称 set时候对其进行过滤不转义。

 

或者重写jfinalsave update方法对用户输入值进行转义。同样扩展一个接口 getUncheck()获取当前model不需要转义的属性名称 save update时候对其进行过滤不转义。

同样这样的方式也不舍用与已经完成的项目改动地方有点多。

第五个环节进行处理:

页面展现

页面取值都是通过后台setAttribute然后前端进行取值,可以在setAttribute把数据库的值进行一次转义。

 

优点:改动小用户输入什么就存入什么100%还原可查(意义不大)

缺点: 一般数据保存的次数远小于展现的次数 读的次数 >> 写的次数,每次展现的时候都会对所有数据进行一次转义浪费服务器资源。用时间换空间不划算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值