偶尔系列中的第二个: 这是第一个
CAT.NET 是否正确,以下是 ASP.NET 中的真正漏洞还是误报?
var myInt = Int32.Parse(txtUserInput.Text);
Response.Redirect(string.Format("myPage.aspx?myId={0}", myInt);
CAT.NET 将此报告为重定向漏洞,需要通过编码 myInt 进行修复。
我不这么认为,它可能会导致异常,因此 TryParse 可能是一种更好的方法。它只是大喊大叫,因为您正在接受用户输入并基于它进行重定向。它可能有点过于激进,这并不是很糟糕。
我不会说那很危险,但这不是我自己写的方式
int myInt;
if(Int32.TryParse(txtUserInput.Text,out myInt)){
Response.Redirect(string.Format("myPage.aspx?myId={0}", myInt);
}
在我看来更干净,因为如果由于用户输入错误而解析失败并且我们明确键入 int,它不会抛出异常。
任何错误处理代码都可以捆绑到最后的 else 语句中。
此代码不存在可利用的漏洞。任何漏洞都将是 myPage.aspx 对 myId 的值所做的事情的结果,而不是您的 url 的构建方式。任何人都可以直接在查询字符串中使用他们想要的任何内容直接点击 myPage.aspx。
但是,这是一种不好的做法,假设您没有在这两行之间的代码中留下任何内容。您应该验证 txtUserInput.Text 是否仅包含数字字符,并且在允许值范围内。
漏洞的发生是因为它发布到的页面对用户提供的数据进行了不正确的解析——而不是 URL 的不正确生成。虽然尝试确保您的网站不会因为表单中的某些内容而写入损坏的 URL 是个好主意,但前端的输入验证与安全性无关。重要的是接受输入的代码如何处理它,因为可以伪造任何帖子或查询字符串。