《常见安全漏洞和解决方案》由会员分享,可在线阅读,更多相关《常见安全漏洞和解决方案(13页珍藏版)》请在金锄头文库上搜索。
1、1.1身份认证安全1.1.1弱密码密码长度6个字符以上密码字符必须包含大写字母、小写字母和数字,并进行密码复杂度检查强制定 期更换密码1.1.2密码存储安全密码存储必须使用单向加密单纯的md5,shal容易被破解,需要添加随机的盐值salt涉及支付及财产安全的需要更高的安全措施,单纯的密码加密已经不能解决问题。可以考虑手机验证码、数 字证书、指纹验证。1.1.3密码传输安全1.1.3.1密码前端加密用户名、密码传输过程对称加密,可以使用密钥对的对称加密,前端使用公钥加密,后端使用私钥解密。前端加密示例引入脚本,rsa加密工具和md5加密工具vscript src = $resourcepath
2、/jsencrypt/bin/jsencrypt.min.jstype =text/javascript前端加密脚本,省略了提交步骤script/ rsa加密,var publicKey$rsaPublicKeyvar encryptnew JSEncryp t();en crypt.setPublicKey(publicKey);/加密in put n ame=var user name = en cryp t.e ncryp t($(user name ).val();var password =en cryp t.e ncryp t($(in put n ame二password).va
3、l();/script注意:前端密码加密如果还用了 md5加密的,先md5加密再rsa加密。后端解密,省略了其他验证步骤ShiroUserServicelmpl.javapublicShiroUser getUser(Str ingname , IntegeruserType , In tegerlog in Type)n ame = RSAUtils.decryptBase64(n ame);publiboolea n doValidUser(ShiroUsershiroUser,Stringcpassword)password = RSAUtils.decryptBase64(passwo
4、rd );https协议访问。1.132启用https协议登录页面、支付页面等高危页面强制 前端加密和https可以结合使用1.2 SQL注入1.2.1描述SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分 程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。 用户可以提交一段数据库查询代码,根据程序返回的结果, 获得某些他想得知的数据,这就是所谓的 SQL Injection,即SQL注入。122解决办法1. 养成编程习惯,检查用户输入
5、,最大限度的限制用户输入字符集合。2. 不要把没有检查的用户输入直接拼接到SQL语句中,断绝SQL注入的注入点。SQL中动态参数全部使用占位符方式传参数。正确List params = new ArrayList();String sql = select * from user where login_name like ?; params.add(username);正确Map params = new HashMap();String sql = select * from user where login_name like :loginname; params.put(usernam
6、e, username); 错误String sql = select * from user where login_name = + username +如果不能使用占位符的地方一定要检查SQL中的特殊符号和关键字,或者启用用户输入白名单,只有列表包含的输入才拼接到SQL中,其他的输入不可以。Stri ng sql = selec t * from +SqlTools. filterl njectio n(table name );1.2.3应急解决方案nginx 过滤规贝U naxsi 模块 axsi nbs.rules# Enables learning mode#LearningMo
7、de;SecRulesEnabled;#SecRulesDisabled;DeniedUrl 750x.html;# check rulesCheckRule $SQL = 8 BLOCK;CheckRule $RFI = 8 BLOCK;CheckRule $TRAVERSAL = 4 BLOCK;CheckRule $EVADE = 4 BLOCK;CheckRule $XSS = 8 BLOCK;标红部分就是SQL注入过滤规则启用级别。基础滤规则已经级别定义省略,可自己定义。13跨站点脚本攻击(XSS1.3.1描述XSS(Cross Si te Scrip ting跨站脚本漏洞),是We
8、b应用程序在将数据输出到网页的时候存在问题, 导致攻击者可以将构造的恶意数据显示在页面的漏洞。1.3.2解决办法1养成编程习惯,检查用户输入,最大限度的限制用户输入字符集合。2不要把用户输入直接显示到页面,不 要相信用户的输入。编码把用户输入编码后输出正确/c:out错误$ 用户输入富文本编辑器和直接显示编辑的HTML,项目总尽量不要开放,如果开放就要严格检查XSS敏感HTML片段,并且严格控制用户权限,做好IP限制这些安全措施。注意:所有XSS过滤器如果要保证过滤后HTML能正常浏览,都只能过滤部分已知的XSS攻击,开发 HTML编辑始终存在风险和隐患。1.3.3应急解决方案web过滤器we
9、b.xmlvfilter vfilter -n ame vfilter-class lllegalCharacterFiltercom.w on dersgroup.wssip.framework.web.filter.IllegalCharacterFilter/ filterclass i nitparam /nitparamexcludeUrl v/ paramname/resource/*,/*/*imagesv/ paramvalue vpara mn ame vparamvalue strict v/ paramname false v/ paramvalue/initparamv
10、filtermappi ngvfilter namevurlpatter nIllegalCharacterFilter /* v/ urlpattern v/ filter n ame 注意:这种方式效率低下,对应大数据提交响应很慢,不推荐。HTML编辑器会被这个过滤器拦截,需要特殊处理。nginx过滤规则naxsi模块axsi nbs.rules# Enables learning mode#LearningMode;SecRulesEnabled;#SecRulesDisabled;DeniedUiT750x.html;# check rulesCheckRule $SQL = 8 BL
11、OCK;CheckRule $RFI = 8 BLOCK;CheckRule $TRAVERSAL = 4 BLOCK;CheckRule $EVADE = 4 BLOCK;标红部分就是XSS注入过滤规则启用级别。基础滤规则已经级别定义省略,可自己定义。默认的规则8级只 要带 符号的通通拦截。1.4跨站请求伪造(CSRF1.4.1描述CSRF(Cross Site Request Forgery,跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作,有很大的危害性。142解决办法1. 验证
12、HTTP Referer 字段2. 在请求地址中添加token并验证服务器生成to ken,输入界面获取to ken,提交是带上t oken,服务器验证t oken参数:excludeUrl参数:refererUrlfilter filter- namefilter-classCsrfFilterfilter-name/3.在HTTP头中自定义属性并验证1.4.3应急解决方案web过滤器web.xml跨站域请求伪造)过滤!- CSRF ( Cross Site Reques t Forgery,排除链接,不参与过滤的链接,支持 ant风格的通配符 允许的referer ,支持ant风格的通配符
13、com.w on dersgroup.wssip.framework.web.filter.CsrfFilter / filter-classi nit-param/ param-value / paramexcludeUrl / param-name vparam-value /resource/*,/*/*images init-param vpara m-nrefererUrl / param-nameamevparam-value http:/127.0.0.1:9080/*/*,https:/127.0.0.1:4443/*/*-value /init-paramvf/ilftielrt-emrappi ngfilter -nCsrfFilte/ame vurl-patter/* /filter-name