检查ASP.NET中的恶意重定向URL

时间:2010-05-29 21:40:21

标签: asp.net redirect

我听说网站使用其他网站将用户重定向到自己的网站或隐藏在其他网站后面。在我的代码中,我在一些地方重定向,例如发表评论(它更容易使用返回的网址,然后使用给定的数据找出页面)。

如何检查返回网址是否是我自己的网址?我想我使用绝对路径,所以我可以很容易地检查第一个字符是否是'/'然后我会失去相对的灵活性。这也禁止我在重定向网址中执行http://mysite.com/blah。我可以通过添加mysite + string来修补网址,但我需要弄清楚字符串是相对网址还是已经是mysite.com网址。

确保我只重定向到我的网站的最简单方法是什么?

3 个答案:

答案 0 :(得分:3)

之前我没想过这个,但是如何在查询字符串参数中使用加密版本的URL?

或者,您可以在某个持久性存储中保留实际URL的列表(可能持续几个小时),并且在查询字符串中,只需将索引包含在URL的持久存储中。由于您是操作此持久性服务器端存储的唯一代码,恶意用户可能做的最差的事情是重定向到不同的有效URL。

答案 1 :(得分:3)

如果redirectUrl包含“://”(包括http://,https://,ftp://等),那么它还必须以“http://mysite.com”开头。如果它不包含“://”那么它是相对的,应该不是问题。像这样:

if (!(redirectUrl.Contains("://") ^ redirectUrl.IndexOf("http://mysite.com") == 0))
{
    Response.Redirect(redirectUrl);
}

答案 2 :(得分:0)

这似乎是一个奇怪的问题,如果您完全控制重定向过程,则不应该担心。如果由于某种原因您允许用户的输入积极参与重定向(如下面的代码所示)

Response.Redirect(someUserInput);

然后,是的,用户可以将您的代码发送给谁知道在哪里。但如果你所做的只是

Response.Redirect("/somepage.aspx")

然后,这些重定向将始终在您的网站上。

像我说的那样,这似乎是一个奇怪的问题。用户输入方面更突出的问题通常是SQL注入攻击和跨站点脚本。我还没有真正听说过“恶意重定向”。