【问题标题】:Reset Password with RSA Keys使用 RSA 密钥重置密码
【发布时间】:2013-08-15 12:29:12
【问题描述】:
  • 我编写了一个模块来使用 RSA 密钥重置您的密码。

  • 代码将向用户发送一封电子邮件,其中包含重置其链接的链接
    密码。

  • 然后用户将点击链接,这会将他返回到 MVC 网站。

  • 链接由三部分组成:URL / ID / Public RSA Key

  • 我正在使用带有路由的 MVC

问题 1:RSA 密钥有斜杠“/”,因此我必须对它们的密钥进行 URL 编码。

问题 2:当 Key 被编码并且用户点击它时,MVC 给我以下错误

请求过滤模块配置为拒绝包含双转义序列的请求

有谁知道如何在 MVC 中使用路由处理 RSA 密钥?

当然不用打开HTML注入的大门……

【问题讨论】:

  • <system.webServer><security><requestFiltering allowDoubleEscaping="true" /></security></system.webServer> 但是这确实暴露了您的应用程序的安全漏洞。见*.com/a/7742208/426894
  • 这将为 HTML 注入打开大门......
  • 您可能想看看*.com/questions/7739233/…。另外,“MVC”在 ASP.net 中是否意味着不同的东西?我只知道模型-视图-控制器设计模式的含义,它不能完全自己做任何错误抛出。
  • 我去看看,谢谢
  • @JAB "MVC" 是对 ASP.net MVC 框架的通用引用。许多人实际上并没有意识到框架是以设计模式命名的,而是使用简写。

标签: asp.net-mvc-4


【解决方案1】:

我建议您将此信息作为查询字符串参数传递。 Scott Hanselman 在this blog post 中详细解释。

引用他的结论:

经过所有努力在请求路径中获得疯狂的东西之后,它是 值得一提的是,只需将值保留为查询的一部分 字符串(还记得这篇文章开头的 WAY 吗?)更容易, 更清洁、更灵活、更安全。

【讨论】:

    【解决方案2】:

    您可以使用 web.config 中的以下代码启用该功能。但是请注意,这可能存在安全风险,因为它允许某人将 javascript 双转义元素附加到页面 url,正如许多其他人所评论的那样。

    <system.webserver>
        <modules runallmanagedmodulesforallrequests="true">
            <security>
                <requestfiltering allowdoubleescaping="true">
                </requestfiltering>
            </security>
        </modules>
    </system.webserver>
    

    到目前为止,您更好的选择是让您的链接转到要求粘贴 RSA 并提交回来的表单。为您的最终用户多做一点工作,但更加安全。

    【讨论】: