【问题标题】:Response.Redirect in Page_Load EventPage_Load 事件中的 Response.Redirect
【发布时间】:2014-10-17 05:33:50
【问题描述】:

如果在 Page_Load 事件期间调用 Response.Redirect("/"),恶意用户可以访问页面的内容(在重定向之前),比如 html 本身?我正在尝试将不允许的用户重定向到 default.aspx 页面,但我不确定以这种方式使用代码是否存在漏洞。

【问题讨论】:

  • 是的,可以有,这取决于你如何使用它。我在this SO answer 中进行了解释,并提到了如何忽略重定向并查看页面内容,就像您关心的那样。即使您当前对Redirect 的使用不会打开此漏洞,但对该函数中的参数进行简单更改,也可以并且将会。
  • @MikeSmithDev 出于测试目的,我在页面中添加了一个 Page_Render 事件并进行了调试。当我使用默认的 Response.Redirect(第二个参数为隐式 true)时,不会调用 Page_Render 事件。所以,一切都是安全的,对吧?没有调用 Page_Render = 用户没有 Html。
  • 嗯,它是“安全的”,但不是最优的。有一天,如果有人试图摆脱您的Response.Redirect(url) 导致的ThreadAbortException,并添加false 作为第二个参数,那么不,它可能不安全。我会继续并立即修复它(使其安全,并且不会在重定向时引发异常)。
  • @MikeSmithDev 使用 Response.Redirect(url, false) 修复的任何提示?我已经知道将 true 作为参数传递会导致异常,以及这对性能有何不利影响。我必须做什么?销毁缓冲页面?
  • 您可以使用visible="false" 将页面包装在一个div 中,并且仅在您不重定向时才显示它。因此,如果他们绕过 302,他们看到的只是一个空白页面。

标签: c# asp.net webforms response.redirect


【解决方案1】:

将您的页面放在安全文件夹中,例如成员。

在该文件夹中添加以下 web.config 文件。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <authorization>
            <deny users="?" />
        </authorization>
    </system.web>
</configuration>

现在只有经过身份验证的用户才能访问该页面。

【讨论】:

  • 这适用于某些场景。但是,如果他需要检查与页面本身相关的用户权限的页面怎么办?比如编辑内容。也许他拥有该特定页面的权利,也许没有……角色在那里无济于事。
【解决方案2】:

不用担心,只要把它放在活动的开始就完成了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多