Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 包含用户名和密码的WebService调用是否比登录站点更不安全?_Asp.net_Security - Fatal编程技术网

Asp.net 包含用户名和密码的WebService调用是否比登录站点更不安全?

Asp.net 包含用户名和密码的WebService调用是否比登录站点更不安全?,asp.net,security,Asp.net,Security,不久前,我们为客户创建了一个没有站点证书/SSL的站点。它只有一个基本的asp_网络登录系统 你不能从这个网站上买任何东西,它也没有个人信息——它只是显示股票,并给用户一个电话号码,用户可以打电话购买股票 我们的一个用户有自己的系统,希望通过一个Web服务获取一些信息——我们打算将一个Web服务和一个WebMethod放在一起,该WebMethod接受用户名、密码和ID,然后将一些信息传递回他们的系统 其中一位开发人员表示,这将使系统的安全性大大降低,因为使用用户名和密码的WebMethod调用

不久前,我们为客户创建了一个没有站点证书/SSL的站点。它只有一个基本的asp_网络登录系统

你不能从这个网站上买任何东西,它也没有个人信息——它只是显示股票,并给用户一个电话号码,用户可以打电话购买股票

我们的一个用户有自己的系统,希望通过一个Web服务获取一些信息——我们打算将一个Web服务和一个WebMethod放在一起,该WebMethod接受用户名、密码和ID,然后将一些信息传递回他们的系统

其中一位开发人员表示,这将使系统的安全性大大降低,因为使用用户名和密码的WebMethod调用比站点上的登录系统安全性要低得多


这个WebMethod调用真的比站点上的登录系统安全吗?

这取决于您计划如何接受密码数据。你应该确保他们不会通过网络发送密码明文。您可以通过使用以下类型的模式来实现这一点:

客户端请求进行身份验证 服务器用临时公钥回复。生成了一个临时私钥并存储在服务器上,如果不使用该私钥,它可能会在短时间后过期。 客户端使用公钥加密密码 客户端通过网络发送加密密码和其他数据 一般来说,无论是什么密码,都不应该通过网络发送纯文本密码。二进制、soap、web服务、http等等。如果它被发送,有人可以嗅到它。只要抓到一个好的wireshark,你所有的数据都会被破坏

如果你已经在做有线加密,那么我看不出它怎么会那么不安全。如果您还添加了某种握手,以便知道谁是谁,或者如果您不能确保在IP源无法发送正确令牌的情况下对请求进行速率限制,那就更好了。这就像是如果某人没有在正确的尝试次数内登录,就将其锁定在您的UI之外

添加SSL也是一个好主意,因为它可以防止中间人攻击。


我不是一个安全专家,但我知道安全是关于层的。加密流量、从不发送明文、关闭端口、管理权限、哈希密码、握手、限制身份验证尝试、大量日志等。

您可以对WebService文件使用混合模式身份验证

请按照以下步骤操作:

右键单击webservice文件 转到身份验证 删除匿名,然后单击“基本windows身份验证” 将文件名添加到web.config以使其可公开访问

使用管理工具在Web服务器中创建用户 调用webservice并使用您创建的用户的凭据 localhost.MyWebService myService=新建localhost.MyWebService; System.Net.CredentialCache myCredentials=新System.Net.CredentialCache; NetworkCredential netCred=新的NetworkCredentialUserName、密码; myCredentials.Addnew UrimyService.Url,Basic,netCred; myService.Credentials=myCredentials


如果您可以在调用Web服务时使用SSL,那就太好了

您的模式仍然使它们容易受到中间人攻击。为了避免这种情况,我鼓励使用SSL。你完全正确。但就像我提到的,这是关于层的。如果它没有传输安全性,例如HTTPS/SSL,那么你已经被套住了,除非基本asp_net登录系统在发送请求头之前安全地散列了至少一个密码。更不安全-web服务可能需要使用保护层,包括消息加密和数字签名;发布表单或使用基本身份验证更难。为了分析开发人员的具体关注点,需要了解开发人员为何做出该声明的其他背景。这不是一个给定的,虽然,我倾向于认为,根据给定的信息,它可能是错误的信息。