2009-10-13 102 views
1

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

如果我一直在ASP.NET MVC或任何其他语言写这个事情,我只是创建一个新的窗体标签与表单action =“https:// ...”。现在我被困在ASP.NET web表单站点中。这意味着我只能在整个页面中使用一个表单标签,从而将我从这个简单的解决方案中解脱出来。

我试过了什么?

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

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

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

最后一种选择是我的情况下的最佳选择,但它变得复杂而没有进入细节。

所以我的问题是,是否有任何其他方式实现ASP.NET中的安全登录控制,而不使用JavaScript?

我一直在寻找我的手指解决这个问题没有找到任何东西,所以如果任何人可以破解这个坚果,荣誉!

+0

不知道这是否会起作用,但如何分离登录控件并将其呈现在页面上的iframe中呢?这会让你有没有恼人的ASP.NET第二种形式? – Lazarus 2009-10-13 11:46:26

+0

请查阅http://msdn.microsoft.com/en-us/magazine/cc163736.aspx上的“管理多个表单” – 2009-10-13 11:51:59

+0

谢谢Viktor我会检查它。但问题是我们正在使用母版页。如果我愿意使用多种形式的解决方案,我需要改变漏洞网站,这是不可行的。 我在考虑iframe,会尝试一个。 我认为这次设计师将不得不弯曲开发者的风格。 – Gargamel 2009-10-13 12:50:53

回答

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> 
+0

你不能这样做 - 失败! – 2009-10-13 11:51:26

+0

@RobW:是的,你可以!我已经完成了数十亿次。 – LukeH 2009-10-13 11:52:54

+0

在第一个表格中制作纯HTML并将其作为旧版ASP(无服务器控件)进行管理。 – 2009-10-13 11:54:16

1

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

您提出的第二种方法是最简单的方法 - 只要您很乐意允许没有JavaScript的用户通过HTTP登录即可。你可以在你的登录页面下面有一个链接,说明类似于被JavaScript隐藏的“安全登录”,以便让他们选择。

+0

是的,这就是缺点,即那些没有JS的人将无法获得连接 – Gargamel 2009-10-13 12:32:01

2

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

如果你有一个专门的登录页面,那么你可以设置为需要SSL在web.config中

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

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

+0

有趣的是,您是否具有ASP.NET AJAX身份验证的经验。服务?或者你知道它是否支持HTTPS,以及当用户没有启用JS时它是如何处理回退场景的?我找不到任何有关这方面的信息。 – Gargamel 2009-10-13 13:02:45

0

大家只是想验证客户端的页面用我最终使用的方法回复你。

,我们不得不要求当这些:

  1. 登录应保护,SSL
  2. 应该支持非JavaScript的senarios
  3. Login控件应该能够在网站的任何位置流。
  4. 只有需要在HTTPS应该使用HTTPS(因此搬回和协议之间转发)

因此,与事实是,我们已经有了一个网站,在web表单模型依赖一个单一形式的标签页,以及事实上,Contentplaceholder依赖带有runat =“server”的表单标签,而我们的网站完全由MasterPage和ContentPlaceholder构建,唯一支持这一点的就是使用I-Frame解决方案。

这对有关刷新页面,JavaScript的(因为几乎evryone使用JavaScript无论如何),HTTP到HTTPS和https访问http张贴一些其他方面的挑战。

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

为了解决Javascript问题,调用和来自不同的协议(它被看作是一个XSS攻击在不同的域中调用JavaScript),我们做了两次回发到页面,并在查询字符串中添加了一些 参数。

嗯,希望这个提示可以帮助你。