当前位置:文档之家› 常见安全漏洞和解决方案

常见安全漏洞和解决方案

1.1身份认证安全1.1.1弱密码密码长度6个字符以上密码字符必须包含大写字母、小写字母和数字,并进行密码复杂度检查强制定期更换密码1.1.2密码存储安全密码存储必须使用单向加密单纯的md5,sha1容易被破解,需要添加随机的盐值salt涉及支付及财产安全的需要更高的安全措施,单纯的密码加密已经不能解决问题。

可以考虑手机验证码、数字证书、指纹验证。

1.1.3密码传输安全1.1.3.1密码前端加密用户名、密码传输过程对称加密,可以使用密钥对的对称加密,前端使用公钥加密,后端使用私钥解密。

前端加密示例引入脚本,rsa加密工具和md5加密工具vscript src =" ${resourcepath} /jsencrypt/bin/jsencrypt.min.js"type ="text/javascript" ></ script ><script src =" ${resourcepath} /jshash-2.2/md5-min.js"type ="text/javascript" ></ |script >前端加密脚本,省略了提交步骤注意:前端密码加密如果还用了md5加密的,先md5加密再rsa加密。

后端解密,省略了其他验证步骤1.132启用https协议登录页面、支付页面等高危页面强制https协议访问。

前端加密和https可以结合使用1.2 SQL注入1.2.1描述SQL注入攻击是黑客对数据库进行攻击的常用手段之一。

随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。

但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。

用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

122解决办法1. 养成编程习惯,检查用户输入,最大限度的限制用户输入字符集合。

2. 不要把没有检查的用户输入直接拼接到SQL语句中,断绝SQL注入的注入点。

SQL中动态参数全部使用占位符方式传参数。

正确List<Object> params = new ArrayList<Object>();String sql = "select * from user where login_name like ?"; params.add(username);正确Map<String,Object> params = new HashMap<String,Object>();String sql = "select * from user where login_name like :loginname"; params.put("username", username);错误String sql = "select * from user where login_name = '"+ username +如果不能使用占位符的地方一定要检查SQL中的特殊符号和关键字,或者启用用户输入白名单,只有列表包含的输入才拼接到SQL中,其他的输入不可以。

1.2.3应急解决方案nginx过滤规则naxsi模块axsi nbs.rules## Enables learning mode#LearningMode;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注入过滤规则启用级别。

基础滤规则已经级别定义省略,可自己定义。

1.3跨站点脚本攻击(XSS1.3.1描述XSS(Cross Site Scripting跨站脚本漏洞),是Web应用程序在将数据输出到网页的时候存在问题,导致攻击者可以将构造的恶意数据显示在页面的漏洞。

1.3.2解决办法1养成编程习惯,检查用户输入,最大限度的限制用户输入字符集合。

2不要把用户输入直接显示到页面,不要相信用户的输入。

编码把用户输入编码后输出正确<c:out value="${用户输入}"></c:out>错误${用户输入}"富文本编辑器和直接显示编辑的HTML,项目总尽量不要开放,如果开放就要严格检查XSS敏感HTML片段,并且严格控制用户权限,做好IP限制这些安全措施。

注意:所有XSS过滤器如果要保证过滤后HTML能正常浏览,都只能过滤部分已知的XSS攻击,开发HTML编辑始终存在风险和隐患。

1.3.3应急解决方案web过滤器> IllegalCharacterFilter > </ filter-name >web.xml<!-- 跨站点脚本过滤参数:excludeUrl 排除链接,不参与过滤的链接,支持ant风格的通配符参数:strict 是否严格模式,严格模式基本只要有大于小于都会拦截,宽松模式只拦截script 这些已知的攻击脚本-->vfilter >vfilter -namevfilter-classcom.w on dersgroup.wssip.framework.web.filter.IllegalCharacterFil ter</ filter-class ><i nit-param ><para m-n ame >excludeUrl v/ param-name >vparam-value >/resource/*,/**/*images v/ param-value > </ init-param ><i nit-param >vpara m-n ame > strict v/ param-name >vparam-value >false v/ param-value ></ init-param ></ filter >vfilter-mappi ng >vfilter- name > IllegalCharacterFilter v/ filter -n ame >vurl-patter n >/* v/ url-pattern ></ filter-mapping >注意:这种方式效率低下,对应大数据提交响应很慢,不推荐。

HTML编辑器会被这个过滤器拦截,需要特殊处理。

nginx过滤规则naxsi模块axsi nbs.rules## Enables learning mode#LearningMode;SecRulesEnabled;#SecRulesDisabled;DeniedUiT750x.html";## check rulesCheckRule "$SQL >= 8" BLOCK;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. 验证 HTTP Referer 字段2.在请求地址中添加 token 并验证服务器生成token ,输入界面获取token ,提交是带上token ,服务器验证token3. 在HTTP 头中自定义属性并验证1.4.3应急解决方案web 过滤器 web.xml<!-- CSRF ( Cross Site Request Forgery, 跨站域请求伪造)过滤参数:excludeUrl 排除链接,不参与过滤的链接, 支持 ant 风格的通配符 参数:refererUrl -->允许的referer ,支持 ant 风格的通配符<filter ><filter- name>CsrfFilter</filter-name><filter-class >com.w on dersgroup.wssip.framework.web.filter.CsrfFilter </ filter-class <i nit-paramvpara m-n ame>refererUrl </ param-name</ filter-mapping注意:修改允许的 referer 白名单refererUrl1.5 X-Frame-Options 未配置1.5.1解决办法1.5.1.1 apachehttp.c onf#set X-Frame-Optio ns vIfModule mod_headers.c>Header always appe nd X-Frame-Optio ns SAMEORIGIN v/IfModule>注意:apache24默认就配置了1.5.1.2 nginxngin x.c onfadd_header X-Frame-Optio ns SAMEORIGIN; 可以加在location locati on / {add_header X-Frame-Optio ns SAMEORIGIN; }<para m-n ame vparam-value </ init-param>>excludeUrl </ param-name >/resource/*,/**/*images</ param-value ><i nit-param >vparam-value >http://127.0.0.1:9080/**/*,https://127.0.0.1:4443/**/* -value > </ param</ init-param </ filter > vfilter-mappi ng <filter -name >CsrfFilter </filter-namevurl-patter n >/* </url-pattern1.6服务器启用了 TRACE方法1.6.1解决办法161.1 apache2.0.55版本以后http.c onfTraceE nable off2.0.55版本以前http.c onfLoadModule rewrite_module modules/mod_rewrite.so在各虚拟主机的配置文件里添加如下语句:RewriteE ngine OnRewriteC ond %{REQUEST_METHOD} A(TRACE|TRACK) RewriteRule .* - [F]1.6.1.2 nginxngin x.c onf# 限制访问的方法if ($request_method !~ A(GET|HEAD|POST)$) { return 403;}可以加在 serverserver {if ($request_method !~ A(GET|HEAD|POST)$) { return 403;}}1.7隐藏服务器版本号1.7.1解决办法1.7.1.1 apachehttp.conf或者http-default.conf ServerToke ns Prod …1.7.1.2 ngi nxngin x.c onfserver_toke ns off;可以加在httphttp{server_toke ns off;}。

相关主题