一、 环境准备

测试通常给的是PDF文档,动辄几百页,看起来很费劲,看文档的时间可能比解决问题的时间还长。。。所以作为需要解决问题的我们来说,最好安装AppScan,请测试人员提供类型为AppScan Scan File的文件。(图片模糊掉了URL,不影响问题分析)

二、 如何分析AppScan扫描出的安全性问题
AppScan扫描出的问题会一般按照严重程度分高,危,参三种类型,高危属于必须要解决的问题;低危一般属于config配置,或IIS配置问题;低的问题,一般也可能是高,低的衍生问题,高危问题造成的衍生问题特别多,故解决问题时,建议从高至低看,并且先易后难,最常见的就是SQL盲注,以SQL盲注为例分析:
当收到测试的测试文件后,双击打开,以疫苗资审为例:

打开之后,分析和定位问题的话,就是看红框框出的几个地方,SQL盲注这个问题就是AppScan向测试网址发送了一个地址:
/Admin/Agent/PackInfo.aspx?id=61+having+1%3D1--+,此时是将id的值由61改成了61+having+1%3D1--+,就是注入了+having+1%3D1--+,程式只要能在这个地址请求的时候,提示User,并终止当前的操作,AppScan即视为这个这个问题解决,下次扫描的时候就扫描不到了。

三、 高危常见问题解决方案
1. SQL盲注:
主要就是通过注入SQL的关键字,来破坏原有的查询,导致页面报错
a. 看看几种常见的盲注方式:


b. 解决方案
思路:过滤关键字,在global.asax文件中的Application_BeginRequest方法中校验敏感字符/字母组合,具体参考网址http://www.jb51.net/article/34671.htm,
具体文件在链接地址的SqlChecker.cs中,项目具有共性,也有特性,所以,SqlChecker.cs中的StrKeyWord,StrRegex视实际情况而定。
实际解决:从上面的几种注入分析看,都含有+字符,最简单最暴力的方法就是过滤掉+字符,如果这样与代码冲突的话,可以按照攻击的方式过滤:如过滤掉+and+,+or+,’+and+’ 等等。。。
2. SQL注入
a. 看看几种常用的SQL注入方式

b. 解决方案
思路:SQL注入与SQL盲注实际的攻入方式不同,但是解决思路都是通过过滤特殊字符,只是过滤的字符稍有差异。
实际解决:从以上几种注入可以看出都含有%27%3B,开始解析%27%3B是什么字符,发现注入sql的是 这个字符,在vs里面过滤掉 这个字符即可。
备注:SQL注入的方式很多,这只是其中的一种,还有其它的种类,比如下图,要具体问题具体分析:

3. 基于跨站点的编制
思路与1,2相同,解决方法也是根据测试的结果过滤掉特殊字符。

4. 已解密的登录请求

解决方案:安装SSL协议,或其它安全加密协议。

5. ASP.NET表单认证旁路
思路:这个问题看起来很高大上,高大上到上网查都没查到解决方案,看着这个报错也是想了很久。。。。现在我们看下这个问题的相关信息
a. 首先是问题信息:原始响应与测试响应对比,测试响应的Cookie中少了ASP.NET_SessionId,就是测试响应除去了cookie”ASP.NET_SessionId”(变体标识675),故猜测可能禁止修改客户端修改此cookie就可以了,在global文件中加了句代码,开始测试。


b. a的方法测试结果是问题仍然存在,于是看了下修订建议,判断此建议并不可行,因为四川九个系统都部署在一个服务器上,如果是环境问题造成的漏洞,那应该是九个报告都有。。。但是,这个问题仅仅出现在两份报告里面。

c. 最后看”请求/响应”页(第一幅图),将GET 后面的地址放到浏览器中测试,地址如下:

这个地址路径在项目中并不存在,所以理论上应该报404的错误,但是打开F12查看,发现实际的状态是200,这说明有可能是StatusCode错误造成的问题,如果是这个问题的话,只需要在跳转的界面中将状态修改成404即可。基于这样的写法,我们开始找跳转的地方,发现是在Application_Error方法中(第二幅图),于是去设定跳转界面的StatusCode:HttpContext.Current.Response.StatusCode = 404;(第三幅图),再次测试,问题解决。



实际解决:在跳转的最终页面设定StatusCode。
四、 低危常见问题
1. 检测到隐藏目录
这个问题是AppScan直接请求项目中存在的文件夹名称,观察项目反馈。反馈分为几种,不作说明,只要配置IIS,并且代码做管控就可以了。方法如下:
a.1首先是IIS配置:



a.2 相应页面代码设定,请注意这里的无权限设定,StatusCode也是404,不要设定成403。

2. 启用了Mircrsoft Asp.Net调试
设定webconfig中节点:compilation debug=”false”

3. 已解密的_ViewStatus参数
增加节点machineKey

4. 自动填写未对密码字段禁用的HTML属性
对密码栏位增加属性:autocomplete="off"

5. 发现电子邮件地址模式
删除项目所有注释中涉及到的邮件地址
五、 如何问题归类
项目中加了check SQL盲注的代码后,确实SQL盲注,SQL注入,SQL旁路注入,跨站点脚本编制都没有了,但是出现了这么多新的问题(图一),WHY????

(图一)
仔细分析每个错误,如下几个问题,报的错都是一样的,所以这些应该是一类的问题,只要解决一个地方,就可以消除这些错误。
从四个红色框中的内容,尤其是最下面的一段script脚本(项目开发中自定义脚本)可以发现代码已经检测到这个请求是有问题的,也将当前页面跳转,但是StatusCode仍然是200,这显然是错误的,所以修改StatusCode状态为400,或404即可。


(图二)

(图三)

(图四)

(图五)
修改之后测试结果如下:状态是404,问题消除。

六、 处理问题注意点
a. 首先看报告中的修订建议,如果没有明确的建议,则看请求/响应部分,目前看来,所有的问题在这里都能找到原因和答案。
b. 设定跳转时,请设定StatusCode,不管是global中的跳转还是代码里面由于某种校验失败而执行的跳转(非常重要)
c. 不要过分纠结某个问题和标题,AppScan同一个问题会造成很多的衍生问题,注意看请求/响应中的请求地址,响应状态和推理,属于同类问题的一种解决方法即可

AppScan安全问题解决方案的更多相关文章

  1. iOS 多线程 浅述

    什么是进程? 进程是指在系统中正在运行的一个应用程序. 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 什么是线程? 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程 ...

  2. iOS开发——多线程篇——NSThread

    一.基本使用1.创建和启动线程一个NSThread对象就代表一条线程 创建.启动线程NSThread *thread = [[NSThread alloc] initWithTarget:self s ...

  3. iOS多线程-01-pthread与NSTread

    简介 恰当的使用多线程编程可以提供任务的执行效率和系统资源的利用率 多线程是为了提高资源利用率,和应用程序的响应速度,多个线程共享应用资源 每个应用程序都有一个主线程,通常用来做UI界面刷新等 比较耗 ...

  4. 20160314 Servlet 入门

    一.Servlet 1.sun提供的一种动态web资源开发技术.本质上就是一段java小程序.可以将Servlet加入到Servlet容器中运行. *Servlet容器 -- 能够运行Servlet的 ...

  5. OC - 19.pthread和NSThread

    简介 恰当的使用多线程编程可以提供任务的执行效率和系统资源的利用率 多线程是为了提高资源利用率,和应用程序的响应速度,多个线程共享应用资源 每个应用程序都有一个主线程,通常用来做UI界面刷新等 比较耗 ...

  6. ca 证书、签名

    1.我现在没有个人CA证书,使用.中信建投网上交易,是如何保障安全的呢? 如果您目前没有个人CA证书,使用.中信建投网上交易,系统其实也是用CA证书的RSA体系进行加密的. 您在输入账户和密码进行登录 ...

  7. 腾讯云安全:移动 APP 安全行业报告

    移动 APP 已逐步渗透入我们的生活,据统计,2016年,APP 发行数量仅电商.金融.游戏这三大类共计高达2万左右,国内移动互联网活跃用户数已经突破10亿,移动互联网这样快速的推移,移动互联网的安全 ...

  8. 案例分析——BAT业务https化经历

         一.前言      通常的http访问会遭到中间人攻击.网络嗅探等普通用户感知不到的恶意行为,这些行为会篡改用户浏览页面引导用户访问非法网站.抓取用户的上网行为以及个人信息.严重的会造成用户 ...

  9. 《Java 8实战》读书笔记系列——第三部分:高效Java 8编程(四):使用新的日期时间API

    https://www.lilu.org.cn/https://www.lilu.org.cn/ 第十二章:新的日期时间API 在Java 8之前,我们常用的日期时间API是java.util.Dat ...

随机推荐

  1. C#学习笔记(十一):动态类型

    C#是一门静态类型的语言,但是在C#4.0时微软引入了动态类型的概念. dynamic 关键字dynamic用来定义动态对象,我们来看一下动态类型的一些特性. 调用不同类的相同方法 我们有两个或多个不 ...

  2. Banach—steinhaus定理的应用

  3. centos6.5下Python IDE开发环境搭建

    自由不是想做什么就做什么,而是想不做什么就不做什么.        ---摘抄于2016/11/30晚 之前学习了一段时间的Python,但所有部署都在windows上.正赶上最近在学习liux,以后 ...

  4. Android开发学习之 定制界面风格

    统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需 ...

  5. Java中Queue类实现

    原先在java编程中,Queue的实现都是用LinkedList Queue queue = new LinkedList(); 但正如jdk中所说的那样: 注意,此实现不是同步的.如果多个线程同时访 ...

  6. iOS开发——数据解析Swift篇&简单json数据处理

    简单json数据处理 //loadWeather var url = NSURL(string: "http://www.weather.com.cn/adat/sk/101240701.h ...

  7. ios开发——实用技术篇OC篇&iOS的主要框架

    iOS的主要框架         阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...

  8. laraval框架model注意事项

    今天创建了一个model,名字叫做Role_Users.php,结果运行的时候死活不识别,后来发现去掉名字中的下划线就可以识别了,虽然解决了,但还是不明白原理,若有大神看到但求解答

  9. yum.pid 已被锁定

      刚刚打开虚拟机,然后打算安装sharutils 工具在安装sharutils 工具的时候 终端提示 “/var/run/yum.pid 已被锁定,PID 为 1610 的另一个程序正在运行.” r ...

  10. iOS 开发常用宏

    来源:iOS_小松哥 链接:http://www.jianshu.com/p/be00c3f3cafd 大家都是知道使用宏不仅方便,而且可以提高开发效率.下面总结了iOS开发过程中的一些常用宏,会持续 ...