问题: 我想创建一个自定义登录控件,安全地发布到HTTPS,而不会影响页面上的其他提交按钮。
如果我是用ASP.NET MVC或任何其他语言编写的,我只想创建一个带有form action =“https:// ...”的新表单标签。现在我被困在一个ASP.NET Web表单站点中。这意味着我在整个页面中只能有一个表单标记,从而使我无法使用这个简单的解决方案。
我尝试了什么?
我在预渲染过程中更改了整个表单的页面,以便操作发布到HTTPS连衣裙。但正如我之前所说,这将使页面上的所有其他按钮也通过SSL提交。我不希望这样。
我使用JavaScript完成了同样的事情。关于这一点的好处是我可以将action属性的fiddeling绑定到特定按钮。缺点是,如果用户禁用JavaScript或没有支持,则用户名和密码将以明文形式提交。
复合方法。我可以使用AJAX加载包含使用JavaScript更改帖子的控件的页面。这样,如果用户没有JavaScript而不是呈现将用户发送到登录页面的按钮,则甚至不会呈现控件。
在我的情况下,最后一个选择是最好的选择,但它变得复杂而没有详细说明。
所以我的问题是,有没有其他方法可以在不使用JavaScript的情况下在ASP.NET中实现安全登录控制?
我一直在寻找解决这个问题的方法而没有找到任何东西,如果任何人都可以破解这个坚果,那就是荣耀!
答案 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>
对客户端进行身份验证
答案 2 :(得分:1)
我没有遇到其他解决方案 - 这是Web表单方法的主要问题之一,也是MVC的一大优点。 Web表单要求您具有使用HTTPS的专用登录页面。
您概述的第二种方法是最简单的方法 - 只要您乐意允许没有JavaScript的用户通过HTTP登录。您可以在登录名下面找到一个链接,说明“安全登录”之类的内容,这些内容被JavaScript隐藏,可以为他们提供选项。
答案 3 :(得分:0)
大家好,我只是想用我最终使用的方法回复你。
我们对这些要求的要求:
因此,我们已经拥有一个依赖webforms模型的网站,其中包含一个单一的表单标签,以及Contentplaceholders依赖于带有runat =“server”的表单标签,而且我们的网站完全由MasterPage和ContentPlaceholder,唯一支持这一点的是使用I-Frame解决方案。
这对页面重新加载,javascript(因为几乎evryone无论如何都使用javascript),http到https和https到http帖子提出了一些其他挑战。
根据需要,我们不希望所有网页都发布到https,只有那些通过网络发送敏感信息的网页。 为了解决这个问题,我们添加了一个每页属性,说明它是否应该进行安全发布。选中此标志后,我们会检查用户是否已来自安全页面。 通过这样做,我们可以更改表单后期操作以反映所需的安全设置。
要解决Javascript问题,调用来自不同协议(它被视为一种XSS漏洞来调用不同域中的javascript),我们会对页面进行双重回发,并添加一些 参数int是查询字符串。
希望这些技巧也可以帮到你。