安全的自定义登录控件ASP.NET

时间:2009-10-13 11:42:13

标签: .net asp.net user-controls login security

问题: 我想创建一个自定义登录控件,安全地发布到HTTPS,而不会影响页面上的其他提交按钮。

如果我是用ASP.NET MVC或任何其他语言编写的,我只想创建一个带有form action =“https:// ...”的新表单标签。现在我被困在一个ASP.NET Web表单站点中。这意味着我在整个页面中只能有一个表单标记,从而使我无法使用这个简单的解决方案。

我尝试了什么?

  1. 我在预渲染过程中更改了整个表单的页面,以便操作发布到HTTPS连衣裙。但正如我之前所说,这将使页面上的所有其他按钮也通过SSL提交。我不希望这样。

  2. 我使用JavaScript完成了同样的事情。关于这一点的好处是我可以将action属性的fiddeling绑定到特定按钮。缺点是,如果用户禁用JavaScript或没有支持,则用户名和密码将以明文形式提交。

  3. 复合方法。我可以使用AJAX加载包含使用JavaScript更改帖子的控件的页面。这样,如果用户没有JavaScript而不是呈现将用户发送到登录页面的按钮,则甚至不会呈现控件。

  4. 在我的情况下,最后一个选择是最好的选择,但它变得复杂而没有详细说明。

    所以我的问题是,有没有其他方法可以在不使用JavaScript的情况下在ASP.NET中实现安全登录控制?

    我一直在寻找解决这个问题的方法而没有找到任何东西,如果任何人都可以破解这个坚果,那就是荣耀!

4 个答案:

答案 0 :(得分:3)

你不能只在<form runat="server">部分之外用自己的形式移动你的控件吗?

<form method="post" action="https://www.example.com/securepage.aspx">
    <ui:securelogincontrol id="SecureLogin" runat="server" />
</form>

<form runat="server">
    <!-- all the stuff that requires a webform -->
</form>

答案 1 :(得分:2)

通常的做法是拥有一个专门的登录页面,其中只包含<asp:Login>控件以提交表单。你有不同的设置吗?

如果您有专门的登录页面,那么您可以将页面设置为在web.config

中要求SSL
<authentication mode="Forms">
    <forms loginUrl="~/login.aspx" slidingExpiration="false" timeout="500" requireSSL="true"/>
</authentication>

您还可以使用ASP.NET AJAX authentication services

对客户端进行身份验证

答案 2 :(得分:1)

我没有遇到其他解决方案 - 这是Web表单方法的主要问题之一,也是MVC的一大优点。 Web表单要求您具有使用HTTPS的专用登录页面。

您概述的第二种方法是最简单的方法 - 只要您乐意允许没有JavaScript的用户通过HTTP登录。您可以在登录名下面找到一个链接,说明“安全登录”之类的内容,这些内容被JavaScript隐藏,可以为他们提供选项。

答案 3 :(得分:0)

大家好,我只是想用我最终使用的方法回复你。

我们对这些要求的要求:

  1. 登录应该是安全的,SSL
  2. 它应该支持非javascript senarios
  3. 登录控件应该可以放在站点流程的任何位置。
  4. 只有需要Https的页面才能使用https(因此在协议之间前后移动)
  5. 因此,我们已经拥有一个依赖webforms模型的网站,其中包含一个单一的表单标签,以及Contentplaceholders依赖于带有runat =“server”的表单标签,而且我们的网站完全由MasterPage和ContentPlaceholder,唯一支持这一点的是使用I-Frame解决方案。

    这对页面重新加载,javascript(因为几乎evryone无论如何都使用javascript),http到https和https到http帖子提出了一些其他挑战。

    根据需要,我们不希望所有网页都发布到https,只有那些通过网络发送敏感信息的网页。 为了解决这个问题,我们添加了一个每页属性,说明它是否应该进行安全发布。选中此标志后,我们会检查用户是否已来自安全页面。 通过这样做,我们可以更改表单后期操作以反映所需的安全设置。

    要解决Javascript问题,调用来自不同协议(它被视为一种XSS漏洞来调用不同域中的javascript),我们会对页面进行双重回发,并添加一些 参数int是查询字符串。

    希望这些技巧也可以帮到你。