asp.net - 重定向到带有 true VS CompleteRequest 和安全线程的 endResponse 的页面

标签 asp.net security redirect

基于this questions and the answers there ,我想问什么是正确的重定向方式。

默认方式使用 Redirect(url, endResponse)会抛出 ThreadAbortException ,因为使用调用 End() 方法的 endResponse=true 进行调用,因此,如果您在 try/中使用它catch block ,这个 exception shown there这可以被认为是错误,但实际上用户试图通过停止页面处理的其余部分来重定向到页面。

其他可能的方法是使用 endResponse=false 调用 Redirect(url, endResponse),然后调用 HttpContext.Current.ApplicationInstance.CompleteRequest(); 通过使用它,您不会遇到任何异常。

所以问题是使用什么更好以及为什么。

最佳答案

您必须始终使用 endRespose=true 调用重定向,否则任何黑客都可以通过简单地按住重定向来查看页面上的内容。

证明我使用NoRedirect Firefox 保持重定向的插件。然后我测试了这两种情况,结果如下:

我有一个简单的页面,其中包含该文本

<form id="form1" runat="server">
<div>
I am making a redirect - you must NOT see this text.
</div>
</form>

然后在页面加载时尝试在两种情况下进行重定向:

第一种情况,使用Complete Request();

    try
    {
        // redirect with false that did not throw exception
        Response.Redirect("SecondEndPage.aspx", false);
        // complete the Request
        HttpContext.Current.ApplicationInstance.CompleteRequest();
    }
    catch (Exception x)
    {

    }

然后就可以看到页面里面有什么了!

第二种情况

try
{
    // this is throw the ThreadAbortException exception
    Response.Redirect("SecondEndPage.aspx", true);
}
catch (ThreadAbortException)
{
    // ignore it because we know that come from the redirect
}
catch (Exception x)
{

}

现在没有显示任何内容。

因此,如果您不希望黑客看到您页面上的内容,您必须将 endResponse 设置为 true 来调用它并停止进行其他处理 - 例如从函数返回而不是继续。

例如,如果您检查用户是否经过身份验证,他可以看到该页面,或者如果没有,他必须重定向到登录,即使在登录中,如果您尝试将 endResponse 设置为 false 来重定向他,那么持有重定向,黑客就可以看看 - 你相信什么不能因为你使用重定向。

我的基本观点是显示如果您不停止将数据发送回浏览器则存在的安全线程。重定向是一个 header 和对浏览器的指令,但同时您需要停止发送任何其他数据,您必须停止发送页面的任何其他部分。

关于asp.net - 重定向到带有 true VS CompleteRequest 和安全线程的 endResponse 的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14641143/

相关文章:

c# - Web 应用程序后端即服务?

python - 鉴于我的代码是开源的并且我在服务器上运行,并且我接受近乎原始的代码,那么最糟糕的情况是什么?

jsp - XSS HTTP参数污染和getQueryString()

linux - 如何在 Linux 中将 cout 重定向到控制台?

javascript - 如何从默认主页重定向到索引页?

重定向位置但不重定向 URL

asp.net - 事件处理程序可能不会在 IIS 7 或 IIS 7.5 集成模式的默认文档中引发?

jquery - Controller 的 Ajax 数据参数始终为空

asp.net - 我在 ASP.NET MVC 上使用 Scripts.Render() - 更新后 6 小时用户仍然获得旧的(捆绑的)脚本文件,这是什么原因?

security - 我的应用程序需要发送电子邮件,我应该在哪里以及如何存储 SMTP 密码?