使用asp.net登录控件的部分站点SSL

我试图将自制的登录系统转换为包含在.net中的标准asp.net登录控件。我希望网站上的所有通信都能让未登录的用户使用明文形式,但在用户登录后将所有内容都锁定在SSL中 - 包括传输用户名和密码。

我之前通过加载第二页 - “loginaction.aspx” - 带有https:前缀,然后通过在Request.Form.Keys中查找正确的文本框控件来提取用户名和密码,从而实现了此前的工作。有没有办法使用.net登录控件做类似的事情?我不想有一个单独的登录页面,而是在网站的每个页面上包含此控件(在登录视图中)。

0

3 答案

你不能简单地做你正在谈论的事情,因为回发(这是登录控件使用的)将会是页面的安全性(SSL或非SSL)。

在这种情况下,最好的办法是使用包含HTTPS(SSL)页面的IFRAME,该页面只包含登录控件。您可能必须在登录后重定向到另一个页面,以便跳出IFRAME。

计划B将在页面上(主要表单外部)具有单独的表单,该表单的ACTION属性指向处理登录的另一个页面。您将不得不滚动您自己的登录代码来处理表单身份验证。

0
额外
请注意,使用这两种技术仍然不安全,因为它容易受到中间人攻击。欲了解更多信息,请阅读。 jlorenzen.blogspot.com/2009/11/…</一>
额外 作者 Erik Funkenbusch,

您无法将网站设置为非SSL,并在每个网页上都有登录框,然后通过SSL提交用户名和密码。

真正实现这一点的唯一方法是使用某种类型的帧。这样您的整个页面可以是非SSL,但登录框架必须是SSL。

这样做的常用方法是使用SSL锁定整个站点,不必担心用户名和密码SSL加密并在登录后转到SSL,或者转到上面提到的帧路由。

0
额外

我可以通过将OnClientClick事件添加到登录按钮控件并将其设置为以下JavaScript函数来完成此操作。
`

function forceSSLSubmit() 
{

                var strAction = document.forms[0].action.toString();

                if (strAction.toLowerCase().indexOf("http:") == 0) {
                    strAction = "https" + strAction.substring(4);

                    document.forms[0].action = strAction;
                }

        }

`

0
额外