【问题标题】:CAT.NET: vulnerability or false positive?CAT.NET:漏洞还是误报?
【发布时间】:2011-01-06 00:06:55
【问题描述】:

偶尔系列中的第二个: Here's the first one

CAT.NET 是否正确,以下是 ASP.NET 中的真正漏洞还是误报?

var myInt = Int32.Parse(txtUserInput.Text);

Response.Redirect(string.Format("myPage.aspx?myId={0}", myInt);

CAT.NET 将此报告为重定向漏洞,需要通过编码 myInt 进行修复。

【问题讨论】:

  • 对我来说看起来无害,但当然取决于程序的其他部分,这可能是个问题。

标签: asp.net security cat.net


【解决方案1】:

我不会说那很危险,但我自己不会这么写

int myInt;
if(Int32.TryParse(txtUserInput.Text,out myInt)){
    Response.Redirect(string.Format("myPage.aspx?myId={0}", myInt);
   }

在我看来更干净,因为如果由于错误的用户输入而导致解析失败并且我们显式键入 int,它不会抛出异常。

任何错误处理代码都可以捆绑到最后的 else 语句中。

【讨论】:

  • 谢谢。我同意 TryParse,我希望通过示例尽可能清楚地说明手头的问题。
【解决方案2】:

我不这么认为,它可能会导致异常,因此 TryParse 可能是更好的方法。它只是大喊大叫,因为您正在接受用户输入并基于它进行重定向。这可能有点过于激进,这还不错。

【讨论】:

  • CAT.NET 似乎在这些方面产生了很多误报。我正在寻找确认我没有遗漏任何东西,感谢您对此发表的评论。
【解决方案3】:

此代码不存在可利用的漏洞。任何漏洞都将是 myPage.aspx 对 myId 的值所做的事情的结果,而不是您的 url 的构建方式。任何人都可以直接在查询字符串中使用他们想要的任何内容直接点击 myPage.aspx。

但是,这是一种不好的做法,假设您没有在这两行之间的代码中遗漏任何内容。您应该验证 txtUserInput.Text 是否仅包含数字字符,并且在允许值范围内。

漏洞的发生是因为它发布到的页面对用户提供的数据进行了不正确的解析,而不是 URL 生成不当。虽然尝试确保您的网站不会因为表单中的某些内容而写入损坏的 URL 是个好主意,但前端的输入验证与安全性无关。重要的是接受输入的代码如何处理它,因为任何帖子或查询字符串都可以伪造。

【讨论】:

  • 嗯,是的,这就是我要问的——鉴于成功将此输入解析为整数——这段代码是否真的容易受到攻击。我的怀疑是否定的,这似乎得到了 cmets 的证实,对此我很感激。显然,简单地将 txtInput 的内容填充到 Url 中是不安全的。
  • 实际上我的意思是,简单地将 txtInput 的内容塞入 URL 是不是不安全的,因为任何人都可以将任何他们想要的东西塞进访问您的 Web 服务器的 URL。它可能会导致糟糕的情况,但它并不比 myPage.aspx 的存在更不安全。取决于 URL 另一端的页面是否安全。
猜你喜欢
  • 2012-08-16
  • 2013-04-20
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多