0

目前,我们有以下情况:

1、有一个网络应用程序,当用户需要登录网络应用程序时,用户将提供他/她的帐户用户名和密码。

用户名和密码将通过 AD 使用以下代码进行身份验证:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;

namespace Access
{
  public partial class Login : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, txtboxDomain.Text))
        {
            bool isValid = pc.ValidateCredentials(txtboxUsername.Text, txtboxPassword.Text);
            if (isValid == true)
            {
                lblLogin.Text = "VALID";
                Session["Person"] = txtboxUsername.Text;
                Session.Timeout = 1;
            }
            else
            {
                lblLogin.Text = "INVALID";
            }
        }
    }


  }
}

但是,一位同事'A'提到上述方式根本不安全。

她提供的理由如下:

  • IIS 上没有 SSL 设置。
  • 即使 IIS 没有 SSL 设置,至少使用 IT 部门的安全 DLL 文件来提供身份验证方法。

但是,另一位同事“B”对她的回答表示怀疑,他认为,由于代码将针对 Active Directory (AD) 进行身份验证,因此它肯定是安全的,因此无需在 Web 应用程序所在的 IIS 上设置 SSL托管。

此外,他告诉她,IT 部门的安全 DLL 文件可能不会提供额外的安全性,因为首先,它是封闭的,其次,他认为它只会减少对身份验证方法的编码需求。

那么,我可以知道我的同事 A 或我的同事 B 的正确程度吗?

4

2 回答 2

0

为了证明 Wireshark 是您唯一需要的工具。

只需配置一个过滤器来捕获在端口 443 上发送到您的 Web 服务器的数据包,然后向下钻取它们。

首先发布没有 HTTPS 的表单(端口 80),然后比较两者。

于 2012-12-14T08:02:11.627 回答
0

最安全的方法是使用集成的 Windows 身份验证,因此用户甚至不必输入密码。

在上面没有 SSL 的代码中,密码将从客户端的浏览器以明文形式发送到网络服务器。可以将明文用户名和密码发送到 Active Directory。如果您的上述配置加密了从网络服务器到 LDAP 服务器的连接(或仅使用 Wireshark 之类的数据包嗅探器),则您必须检查 .NET 文档以获取 pc.ValidateCredentials。

于 2012-12-14T20:54:01.110 回答