解决由gsearch.html文件错误造成缓冲池假死问题

Hailin 发表于 2016-06-06 08:49:49 来源于CMS插件网 评论 0 点击 1040
摘要:这是一个不容易发现的问题,因为正常使用是不会出现问题的,只有非正常使用情况下才会发生,比如漏洞扫描、sqlmap等工具扫描时会发生,我们还是拿DTcms官方网站来做测试;

这是一个不容易发现的问题,因为正常使用是不会出现问题的,只有非正常使用情况下才会发生,比如漏洞扫描、sqlmap等工具扫描时会发生,我们还是拿DTcms官方网站来做测试;输入如下地址

http://demo.dtcms.net/gsearch.html?category_id=40&min_price=0&max_price=100&orderby

结果就会出现如下错误页面,

5.jpg

通过测试,我们发现程序错误是出现

string paramKey=Request.QueryString.GetKey(i).ToString();

这一行,GetKey 获取集合中指定索引处的键,因为地址orderby后面缺少等于号,所以才会报错,那怎么解决呢?

方法很简单,我们只需要判断是否为空,为空就不执行:代码如下

模板文件:gsearch.html

for (int i = 0; i < Request.QueryString.AllKeys.Length; i++)
{
  object obj = Request.QueryString.GetKey(i);
  if (null != obj)
  {
  string paramKey = obj.ToString();
  int paramValue = Utils.StrToInt(Request.QueryString[i].ToString(), 0);
  if (paramKey.StartsWith("s_") && paramValue > 0)
      {
      dicSpecIds.Add(paramKey, paramValue.ToString());
      }
  }
}

好了,问题已经解决,大家可以好好的测试一下!

热门资讯