【问题标题】:Unsecure posting back from an asp.net control on a secure page while avoiding authentication从安全页面上的 asp.net 控件返回的不安全回发,同时避免身份验证
【发布时间】:2008-10-14 16:03:44
【问题描述】:

我们使用标准的 asp.net 表单身份验证。某些页面需要用户登录;并且这些页面中至少有一些是通过 https 传递的。每个页面的顶部都有一个搜索控件。使用这个时,我们不关心用户的会话是否过期,即使当前页面需要登录。

但是,目前,在执行搜索时,内置表单身份验证会看到被发布到的页面需要身份验证并将用户重定向到登录页面,上一页,不是搜索结果页面 作为推荐人。

这里绕过安全性的最佳方法是什么?我考虑过使用 PostBackUrl 属性发布到不同的页面,但如果这不是 https,您会收到“您正在将数据发布到不安全的连接”消息,这是用户不喜欢的。

感谢您的帮助。

编辑:感谢 Nick 关于在搜索页面上使用 GET 的建议。我们已经这样做了,但是查询字符串是由搜索输入控件构造然后重定向的。我们如何在不使用回发的情况下构建查询字符串? (显然 javascript 是一种选择,但我希望找到一种替代机制。)

【问题讨论】:

    标签: asp.net security asp.net-2.0


    【解决方案1】:

    对于搜索页面,您要确保搜索是通过 GET 请求进行的。 (例如,像查询字符串中带有“q”的 google)你可能正在做一个 POST。

    所以改变你的

    <form method="post" ...>
    

    <form method="get" ...>
    

    大多数开发人员在搜索页面上犯的最大错误是回帖。 HTTP 旨在通过查询字符串(因此名称)进行查询或搜索,并获得一个表单以发布到查询字符串而不是您需要使用“GET”方法的正文。这样任何搜索设备都可以使用您的搜索页面,甚至是浏览器的搜索框。

    其次,您想为您的搜索页面创建一个特殊的location config。你把它添加到你的 web.config 中。

    <location path="my-search-page.aspx">
        <system.web>
            <authorization>
                <allow users="*" />
            </authorization>
        </system.web>
    </location>
    

    这会为该页面创建一个特殊的覆盖,并且位置标记内的所有内容都使用完全相同的 web.config 结构来覆盖 web.config。

    您需要对每个要允许所有用户访问的页面重复此操作。

    【讨论】:

      【解决方案2】:

      如果搜索结果页面正在执行回发,则会在单击您的搜索按钮之前触发 pageload 事件。

      因此,如果他们所在的页面需要登录,则登录命令将在搜索按钮单击事件将他们发送回登录屏幕之前运行。

      有几种方法可以使搜索成为普通的 html 表单,并使其执行 GET 而不是 POST,并由“Nick”提及

      如果整个页面都在 .net 回发表单中,您需要将搜索按钮事件添加到页面加载的过载中,以便它首先触发。

      该网站在页面上有一篇不错的文章,例如循环及其覆盖。 http://www.15seconds.com/issue/020102.htm

      【讨论】:

        【解决方案3】:

        正如其他答案中所建议的那样,最正确的方法是将搜索输入控件置于单独的表单中,该表单具有 get 方法和 searchresults.aspx 操作。然而,这对于 aspx 来说很困难,因为您只能在一个页面上拥有一个服务器端表单。

        最后我找到的解决方案,效果很好,是有一个 HttpModule 来检测“搜索”按钮是否被点击(通过查看是否存在带有其 id 的参数)然后建立一个通过查找条件参数查询字符串并重定向到搜索结果页面。这意味着所有的身份验证/授权模块都被绕过了,因为我们已经在它们被触发之前调用了重定向到(不安全的)搜索结果页面。

        它有点脆,但对我们来说效果很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-27
          • 1970-01-01
          • 2020-05-04
          • 1970-01-01
          • 1970-01-01
          • 2011-09-24
          • 2012-06-20
          相关资源
          最近更新 更多