欢迎关注:1,欢迎关注本博客,你可点击右手边的【QQ邮件订阅】订阅本博客!2,本博客推出江湖救急计划,主要为工作中遇到疑难杂症的兄弟提供远程技术支持和分析,如有需要,请在江湖救急计划页面给我留言!

策略误报导致应用保存失败的分析案例

作者:易隐者 发布于:2013-4-20 14:13 Saturday 分类:案例讨论

       某用户应用,需要将一些修改信息提交保存至业务服务器,在这个保存过程中出现无法保存的现象(保存失败,点击保存按钮后,IE页面进度条长时间处于加载状态),我出于帮忙,到用户现场捕获了业务保存时的交互报文,如下图所示:
点击查看原图

       查看这个交互的过程,我们可以非常清晰的看到,客户端与服务器TCP三次握手正常,问题出在客户端提交POST请求的报文被中间设备丢弃了。比较有趣的是,客户端在尝试两次重传之后,较为聪明的将这个POST请求字段(长度为859B)拆分为两个长度分别为536B和323B的字段,并先将长度为536B的应用字段重传给服务器,我们清楚的看到服务器对这个应用字段作出了确认,这说明这个长度的应用字段正常到达了应用服务器,但是后续长度为323B的应用字段一直被丢弃,这很容易想到是中间设备策略误报一直丢弃某些固定报文导致的,我们来看一下这个应用字段里到底封装的是什么应用数据,我们首先看这个报文的应用字段解码如下:

点击查看原图

       这个看得有点头晕,我们将这段字符解码一下,如下图所示:
点击查看原图
       解码之后,我们可以看到这个应用字段中存在“varchar(60)”等关键字,这可能引起WAF、IPS等设备将此报文误报为SQL注入的尝试。      

阅读全文>>

标签: 应用故障 IPS 策略误报 POST WAF SQL注入

评论(7) 引用(0) 浏览(3700)

应用响应时间(ART)

作者:易隐者 发布于:2012-9-13 18:38 Thursday 分类:网络分析

       在实际的业务应用操作中,客户端向服务器的操作主要分为两类,一类为客户端向服务器上传数据,如HTTP应用中的“post”操作,另一类为客户端从服务器取数据,如HTTP应用中的“get”操作。应用程序对这两个操作的处理机制不同,因此有必要把应用响应时间按照客户端的这两类操作进行划分,下面分别针对服务器端的这两种响应时间进行阐述。

“get 操作应用响应时间

      “Get”操作主要是指客户端向服务器端发送取数据的请求。应用程序对“Get”操作的响应时间主要是指服务器收到get请求数据包至服务器响应第一个带有应用层数据的数据包的时间间隔。其响应时间的计算如下图所示: 

点击查看原图

Get操作应用响应时间计算示意图(一)

       应用程序在处理客户端请求的时候会消耗一定的时间,并不一定能够及时响应请求的数据,为了不让客户端等待过长的时间(时间过长,很可能导致客户端重传数据),服务器很可能首先对客户端的TCP数据段进行响应(Delay ACK)。在上面的图示中,第二个包是TCP层的响应,其应用层的数据的长度len=0,第三个包包含有应用层数据,其数据长度len=n,因此,该应用响应时间就是T3-T1。而下图中,应用程序很快的响应了客户端的请求,第二个包中就已经包含有应用层数据,其长度为len=n,其应用响应时间的计算就是从第二个数据包开始,为T2-T1。 

点击查看原图

Get操作应用响应时间计算示意图(二

        我们再看一下实际应用中的get操作应用响应时间的计算。下图为web应用中某“get”操作的数据交互过程: 

点击查看原图

 web应用中GET 操作的交互过程

       在上图中,我们可以看到,当客户端向服务器发送取数据的get请求后,服务器的传输层首先针对客户端的TCP数据段进行了响应,其应用层数据长度为0,接下来第三个数据报是服务器应用程序对客户端get请求的响应,其包含应用数据。在这个过程中,“get”操作应用响应时间就是第三个数据包与第一个数据包的时间间隔,在该例子中为0.08149秒。

“Post”操作应用响应时间

       “post”操作主要是指客户端向服务器上传数据的操作。“Post”操作应用响应时间主要指服务器端接收到客户的post操作数据包与服务端处理完这些数据后对客户端做出相应响应的时间。关于这种应用响应时间计算的方法请参见本博客《关于client push操作应用响应时间的计算方式的讨论》一文。这篇文章较为详细的描述了客户端向服务器递交数据时的服务器应用响应时间测量的方法。

       在实际的应用中,存在两种常见的应用场景,一种是服务器端在收到客户端的数据,应用进程处理完毕后,需要向客户端发送响应数据;另外一种情况是服务器端接收并处理来自客户端的数据,但是应用进程并不会发送响应数据给客户端。下面我们分别针对这两种类型的应用进行描述。

1,有应用层响应数据的

       当客户端向服务器发送“post”操作数据后,应用层如果有应用数据的响应,那么计算应用响应时间的方法与计算“get”操作应用响应时间的方法一致。就是指服务器收到post请求数据包至服务器响应第一个带有应用层数据的数据包的时间间隔。下图展现的就是一个针对客户端的 “post”操作,应用进程产生应用层响应数据的交互过程:

点击查看原图

有应用层响应数据的“post”操作交互过程

       在这个“post”操作数据交互过程中,我们可以分析出应用响应时间为12.847148秒。

2,无应用层响应数据

       在客户端向服务器发送数据时,如果服务器端应用进程没有应用数据响应,那么服务端仅仅只在TCP层面响应客户端数据的ACK,如下图所示的应用层数据交互的过程: 

点击查看原图

无应用响应数据的“post”操作数据交互

       既然无应用数据响应,那么就说明站在网络数据交互的角度,无法测量应用程序的响应时间,即使测量了,也无法真正反映应用程序的响应时间,在实际应用中,我们就没有测量的必要了。

阅读全文>>

标签: 响应时间 应用响应时间 ART get client push delay ack POST

评论(0) 引用(0) 浏览(8552)

Powered by 易隐者 基于emlog 皖ICP备12002343号-1