2019独角兽企业重金招聘Python工程师标准>>> hot3.png

本文比较粗糙,作用是引领大家认识web安全漏洞并根据自己参与的安全加固工作提供一些解决思路。

开始——安全扫描报告

Web应用的安全加固是从安全扫描报告(当然有经验的架构师和软件工程师可以在架构和编码时将漏洞消灭于萌芽),加固人员通常根据报告的内容针对性的完善程序漏洞。

目前一下是见过IBM Relational AppScanFortityAcunetix Website Audit的安全扫描报告(由于涉及漏洞信息,具体的内容就不展示了)。

162227_bjaK_614144.png

IBM Relational AppScan

162249_5aUI_614144.png

Fortity

163411_yqI9_614144.png

Acunetix Website Audit报告

如果能使用安全扫描工具进行扫描,那就更好了,毕竟报告是扫描工具生成的,扫描工具的结果更详细,更具参考性。如IBM Relational AppScan

163513_DUCi_614144.jpg

IBM Relational AppScan扫描结果

消灭漏洞——安全漏洞分析

IBM Relational AppScan的漏洞结果为例,我们常见的漏洞如下,大致分4个级别

Microsoft Windows MHTML 跨站点脚本编制【级别-高】

SQL 盲注【级别-高】

已解密的登录请求【级别-高】

跨站点请求伪造【级别-中】

链接注入【级别-中】

通过框架钓鱼【级别-中】

Autocomplete HTML Attribute Not Disabled for Password Field【级别-低】

Internal IP Disclosure Pattern Found in Parameter Value【级别-低】

检测到文件替代版本【级别-低】

临时文件下载【级别-低】

HTML敏感信息泄露【级别-参考】

发现电子邮件地址模式【级别-参考】

发现内部IP泄露模式【级别-参考】

潜在的文件上载【级别-参考】

注:为避免信息泄漏,请求中很多无关信息进行了修改,关键部分不会变更

Microsoft Windows MHTML 跨站点脚本编制【级别-高】

攻击请求示例 

/demo/page/city/cityAction.do?method=cityTree&uid=1378952840737&id=Content-Type:%20multipart/related;%20boundary=_AppScan%0d%0a--_AppScan%0d%0aContent-Location:foo%0d%0aContent-Transfer-Encoding:base64%0d%0a%0d%0aPGh0bWw%2bPHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD48L2h0bWw%2b%0d%0a&a_dhx_rSeed=1378952840737

攻击结果

<?xml version='1.0' encoding='utf-8'?>
<tree id="Content-Type: multipart/related; boundary=_AppScan
--_AppScan
Content-Location:foo
Content-Transfer-Encoding:base64PGh0bWw+PHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD48L2h0bWw+
"></tree>

攻击说明

通俗的讲,这个漏洞就是攻击者将一段恶意脚本已参数的形式发往后台,若web应用没有进行防御将脚本返回前台,HTML将会将恶意代码嵌入页面,之后用户信息将暴漏给攻击者。

以上面的漏洞为例,这个请求是JavaScript控件生成的,请求将根据一个id查询其子节点数据并返回,由于树形控件需要将数据返回前台并拼接树,所以id属性会返回前台。

当攻击者使用HTTP请求分析工具(如HttpWatch、浏览器自带的开发人员工具)获取该请求地址后,可以修改id的属性。如果后台没有对id属性进行校验,那么攻击脚本将会显示在页面,用户的后续操作将暴漏给攻击者。

建议加固方案

启动校验框架,对请求参数进行校验,比对使用正则表达式对id的值进行校验——只能是字母和数组。

目前主流的框架如struts、spring都提供了丰富、灵活的校验框架,加上正则表达式的支持,安全加固工作可以快速的开展。

额外说明

a) 这个已经到http请求级别,javascript的校验框架早已跳过(不得不说javascript校验是纸老虎,限制一下合法用户的输入)

b) 有人会说我输入合法的id信息,但是不是这用户有权限管理的id,这个怎么处理?首先,这个不是安全漏洞,应当算作业务漏洞,说明程序在鉴权模块的设计不够完善;其次,安全漏洞不应当嵌入业务逻辑中进行,进行加固的最佳位置的进入“控制层”之前(所有的框架都是这样做的),进行业务校验的最佳位置是“业务层”之前(简单系统建议使用AOP的方式在业务代理层中实现)。

SQL 盲注【级别-高】

攻击请求示例

POST /demo/page/reportgroup/ReportGroupUpdate.do?method=add&name=1234%2F**%2Fand%2F**%2F7659%3D7659&parentId=&parentName=1234&addUserGroup=&delUserGroup=&delReportGroup=&reportList=&description=1234

攻击说明

非严谨的解释就是攻击者将恶意代码已请求参数的形式传入后台,若后台进行数据库查询,恶意代码嵌入到SQL语句,使攻击者可以获得额外信息。假设原SQL是select * from t_user t where t.id = ?,若攻击者注入* and 1=1,那么sql将是select * from t_user t where t.id = * and 1=1,这样攻击者就能看到所有用户的信息。

实际业务中的SQL远比以上复杂,但是攻击者的攻击方式也不是这么简单,因此要抓住要点进行防御。

建议加固方案

1. 使用PrepareStatement。预编译的SQL可以有效防御攻击者的脚本,如果你使用了ORM框架,不用担心,通常ORM框架都提供了类似Preparestatement的支持,比如ibatis/mybatis中,SQL中使用##进行参数站位将使用preparestatement。

2. 使用存储过程。存储过程转入参数时将会进行合法性校验,恶意SQL通常会视为异常参数而无法处理。

3. 启动校验框架,对请求参数进行校验,这个可以更加通用,更加高效的拦截恶意SQL。

已解密的登录请求【级别-高】

攻击请求示例

POST /demo/page/user/editUser.jsp?userType=1&sccAdminName=1234&sccAdminPwd=1234&confirmSccAdminPwd=Acme-Hackme+Corp.&systemAdminName=1234&systemAdminPwd=1234&confirmSystemAdminPwd=Acme-Hackme+Corp.&description=1234

攻击说明

很好理解,你的请求中包含了明文密码。由于抓去http请求非常简单,将用户密码明文传输基本就是告诉攻击者我的密码是多少。处理密码,以下信息也需要进行加密处理:

- 用户名

- 密码

- 社会保险号码

- 信用卡号码

- 驾照号码

- 电子邮件地址

- 电话号码

- 邮政编码

建议加固方案

1. 前端加密,后台直接使用加密后的密码进行匹配。目前主流的方式是前段使用MD5加密,后台直接使用密文密码进行匹配。

2. 有些业务比较特别,可能需要明文密码进行处理,这时候设计前段加密,后端解密的处理,可是由于加密盐可能被JS暴漏,这个方案不是最好的选择。

跨站点请求伪造【级别-中】

攻击请求示例

POST /demo/checkkeystore.do HTTP/1.0

Cookie: JSESSIONID=00e66855f6cb368a2f543053af46; SSO=eG9YZStrSUV5U21GYUFuL2JqNjBLa3Zic2QyMXZHU0ZLNW81Z3VrdWZiNG5mbmJ3Mi91QmFjclF2SW5aOGFOWUZpL1V3UTRKQk1MQgpNNW1xY2dHaG5qd0tWQXdVQTNZeng0TW43Y0ZMVUFxZDlENGJPcEVWcTl5clIyV0NnTzRnZjFuSmRxdGhzZG89

Content-Length: 34

Accept: */*

Accept-Language: zh-cn

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)

Host: 192.168.106.79:8080

Content-Type: application/x-www-form-urlencoded

Referer: http://bogus.referer.ibm.com

攻击说明

关于Referer:

HTTP Referer是header的一部分,当浏览器web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

攻击者可以窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使攻击者能够以该用户身份查看或变更用户记录以及执行事务。

建议加固方案

使用filter对header的referer信息进行校验,referer信息可以为空、当前web应用以及信任地址。

链接注入【级别-中】

攻击请求示例

GET /demo/page/grade/gradeAction.do?method=userGroupTree&authz=true&nodeType=province&fullId=ha&provinceId=ha&uid=1378952847091&id="'><A%20HREF="/WF_XSRF.html">Injected%20Link</A>&a_dhx_rSeed=1378952847091

攻击说明

和“跨站点脚本编制类似,只是请求注入了<a>标签,参数返回页面时将在页面生成可以非法的连接。由于这个相对“跨站点脚本编制比较明显,因此级别是中。

建议加固方案

启动校验框架,对请求参数进行校验,比对使用正则表达式对参数的值进行校验——重点过滤<和>。

通过框架钓鱼【级别-中】

攻击请求示例

GET /demo/ city/cityAction.do?method=cityTree&uid=1378952840737&id=ha"/>%3cabc+xmlns%3axyz%3d'http%3a%2f%2fwww.w3.org%2f1999%2fxhtml'%3e%3cxyz%3aiframe+src%3d'http%3a%2f%2fdemo.testfire.net'%2f%3e%3c%2fabc%3e&a_dhx_rSeed=1378952840737

攻击说明

和“跨站点脚本编制链接注入类似,只是请求注入了<iframe><frame>标签,参数返回页面时将在页面生成一个非法的嵌套页面。

建议加固方案

启动校验框架,对请求参数进行校验,比对使用正则表达式对参数的值进行校验——重点过滤<和>。

Autocomplete HTML Attribute Not Disabled for Password Field【级别-低】

攻击说明

HTML5中添加了新属性Autocomplete该属性可以可以让用户在输入框中找到历史填写信息。若密码输入框(<input type="password" />)没有关系该属性,攻击者可能会绕开 Web 应用程序的认证机制。

建议加固方案

在开发和修改时,遇到密码输入框,关闭Autocomplete属性。

<input type="password" autocomplete="off" />

Internal IP Disclosure Pattern Found in Parameter Value【级别-低】

攻击请求示例

POST /demo/authn/authAction.do?method=add&forwardUrl=http%3A%2F%2F192.168.11.93%3A80%2Chttp%3A%2F%2Fwww.baidu.com%3A80&resCode=IAM111&resKey=5OlwlhzHNn8%3D&from=iam&targetAction=%2FloginAction%21authByIAM.action

攻击说明

参数值中发现了内部IP,攻击者可能会收集有关 Web 应用程序的敏感信息,如用户名、密码、机器名和/或敏感文件位置。

建议加固方案

这个安全级别是低,由于IP地址被攻击者获取到后可能展开后续针对服务器的攻击,而不是直接攻击当前应用程序,因此可参考修复。

检测到文件替代版本【级别-低】

攻击请求示例

GET /demo/_userAction.do

攻击结果

HTTP/1.1 200 OK

Set-Cookie: JSESSIONID=01853c86546b44cb00af12e425e8; path=/demo

Content-Length: 2120

Server: TongWeb Server

P3P: CP="CAO PSA OUR"

Content-Type: text/html;charset=UTF-8

Date: Thu, 12 Sep 2013 02:55:31 GMT

Connection: close

攻击说明

漏洞扫描工具尝试在正确请求前添加下划线“_”等符号,判断服务器上是否有旧版本或无用文件。

建议加固方案

即时清理服务器上的旧版本或无用文件。

临时文件下载【级别-低】

攻击请求示例

GET /demo/Copy%20of%20userAction.do

攻击结果

HTTP/1.1 200 OK

Set-Cookie: JSESSIONID=01850ed7359fdce3604aedd9dac9; path=/demo

Content-Length: 2120

Server: TongWeb Server

P3P: CP="CAO PSA OUR"

Content-Type: text/html;charset=UTF-8

Date: Thu, 12 Sep 2013 02:55:30 GMT

Connection: close

攻击说明

漏洞扫描工具尝试访问Copy of userAction.do,从而判断服务器上是否遗留有备份文件。

建议加固方案

即时清理服务器上的备份或无用文件。

参考级别的漏洞

参考级别不再一一介绍,参考级别可以说不是漏洞,甚至有些时候就是正常的业务。

HTML敏感信息泄露【级别-参考】

HTML中有有注释信息,可供攻击者参考

发现电子邮件地址模式【级别-参考】

HTML中有邮件地址,攻击者可以获取目标用户的邮箱。

发现内部IP泄露模式【级别-参考】

页面存在填写IP信息的输入框,攻击者可以抓去ip地址

潜在的文件上载【级别-参考】

存在上传功能,上传功能可能导致攻击者上传恶意脚本。

总结

启用校验框架

很多漏洞都可以通过校验框架实现加固,如Microsoft Windows MHTML 跨站点脚本编制【级别-高】、SQL 盲注【级别-高】、链接注入【级别-中】、通过框架钓鱼【级别-中】。

不开启检验框架是一个重大的错误。

Header信息校验

虽然有些浏览器不支持header信息,但是这里依旧是攻击的重点区域,需要对header信息进行统一的管理。

安全报告不一定准确

工具毕竟不是人,程序在判断漏洞的时候有一些硬性条件,比如:返回200状态、页面显示了某些数据等。

这些结果也许是错误的:假设我的web应用拦截并处理的攻击,但是我需要在页面提示,由于服务器响应的这次攻击请求,漏扫软件依旧认为web被攻击了。

区分业务校验和安全漏洞

输入非权限管理范围的信息能够查询到数据,这类操作是程序的鉴权模块不完善导致的,不能算作安全漏洞。

同时,安全的加固通常在进入控制层之前完成,如filter或是校验框架。鉴权通常在业务层之前完成,如service的代理类中。两者混淆将导致程序复杂度的增加。

千里之堤毁于蚁穴

平时的代码开发中就应当考虑安全编码,在漏洞爆发后再修复所带来的损失将是不可估量的。

不积跬步无以至千里,加强安全编码是一项长期的工作,需要每一位开发者重视。

转载于:https://my.oschina.net/SEyanlei/blog/264307

web安全漏洞加固方案简析相关推荐

  1. PHP+FlashPaper文库系统方案简析

    博客原文:http://www.joychao.cc/516.html 之前在兄弟连的第二个项目,做了一个类百度文库的一个文库系统,效果还行,虽然不是很完美,但是基本的一个功能实现了用户上传word, ...

  2. sos的几种方案简析

    关键字: 单点登录 SSO Session 单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环境中可以采用 ...

  3. 常见web安全漏洞修复方案(全面)

    第一章 SQL注入漏洞 第一节 漏洞介绍 概述:SQL注入攻击包括通过输入数据从客户端插入或"注入"SQL查询到应用程序.一个成功的SQL注入攻击可以从 数据库中获取敏感数据.修改 ...

  4. 滑坡、沉降监测方案简析

    我国地形复杂多样,山区面积广大,其中山地面积占总面积的33%,碰上降水充足的年份山体滑坡及泥石流等自然灾害会频发,所以土壤的移动监测就非常必要了,监测土壤的唯一变化可以实时的详知土壤的变化,在重大灾害 ...

  5. 直播 点播服务视频流媒体方案简析

    视频流媒体    视频流媒体被广泛应用于视频直播,智能交通,智能办公,社交媒体等行业,视频流媒体的使用极大的方便人们的生活方式,带来了远距离的数字化方案. 编码技术 MPEG-1 MPEG-1是MPE ...

  6. 两台手机通过4g网络直接通讯_王者不卡了!手游电竞网络保障方案简析

    目前手游电竞行业以迅雷不及掩耳之势兴起,王者荣耀,和平精英,QQ飞车等等已经有了自己专属的电竞赛事. 相对于电脑(PC)有线终端来说,手游电竞使用的网络都是无线传输,无线相对于有线来说存在先天的缺陷- ...

  7. Java中高级核心知识全面解析——Redis(集群【概述{主从复制、哨兵、集群化}、数据分区方案、节点通信机制、数据结构简析】)5

    目录 一.[集群]入门实践教程 1.Redis 集群概述 1)Redis 主从复制 2)Redis 哨兵 3)Redis 集群化 2.主从复制 1)主从复制主要的作用 2)快速体验 ①.第一步:本地启 ...

  8. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  9. NETGEAR 系列路由器命令执行漏洞简析

    NETGEAR 系列路由器命令执行漏洞简析 2016年12月7日,国外网站exploit-db上爆出一个关于NETGEAR R7000路由器的命令注入漏洞.一时间,各路人马开始忙碌起来.厂商忙于声明和 ...

最新文章

  1. Nature子刊:三代测序重构菌株水平宏基因组序列的计算框架iGDA
  2. 税收征收管理法律制度
  3. PowerDesigner165安装婆姐汉花教程
  4. 关于WebService中用到的QName详解
  5. 开发必看 | iOS开发常用设计模式!
  6. 牛客小白月赛12 H 华华和月月种树 (离线dfs序+线段树)
  7. python中mainloop添加背景_Python实例讲解 - tkinter canvas (设置背景图片及文字)
  8. python 程序打包 vscode_使用VScode编写python程序并打包成.exe文件
  9. 盈不足术与老鼠打洞问题的近似解
  10. 前端常用功能记录(一)
  11. “酸碱体质理论”是个骗局
  12. python壁纸4k_别人用钱,而我用python爬虫爬取了一年的4K高清壁纸!真实用!
  13. 大学生职业生涯规划包word,ppt模板以及必备素材
  14. linux dnf教程视频,DNF的命令使用教学
  15. DDOS专题详细讲解
  16. java tiff 压缩_java – 多页Tiff压缩
  17. NtripShare OpenSource/NtripShare GNSS共享计划 -- JT808终端模拟器源码(四)
  18. PIC16F877A单片机 (中断与定时器Timer2)
  19. 大数据技术如何有效阻击网络黑产?
  20. ffmpeg statis vs dev技术选型?

热门文章

  1. 在Eclipse的CDT:配置和开发Qt5工程
  2. 深入理解ROS技术 【2】ROS下的模块详解(66-128)
  3. 微信小程序购物车 数量加减功能
  4. 微信小程序(购物车)--在wxml中设置保留小数位数
  5. vue 导入公共css_HTML+CSS入门 vue引入通用CSS
  6. 怎样在线把别人web前端代码抓下_自学web前端8个月,我是怎样拿下7K薪资的?
  7. MFC listctrl显示缩略图时索引问题和滚动条问题
  8. Java 源码学习系列(三)——Integer
  9. OSGI动态加载删除Service bundle
  10. Java集合类ArrayList循环中删除特定元素