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