2012-04-25 78 views
1

我的网站正在创建一个扩展其功能的应用程序 - 这意味着该应用程序不需要遵循严格的OAuth流程,因为我们明确信任自己。发送用户名/密码是否安全?

我们希望应用的用户能够从应用内输入他们的用户名和密码......这意味着我们需要一种方法将该信息传输到网络服务器以验证它们。

假设我们使用SSL,这是一个安全的想法吗?

我们是否需要采取额外步骤,并且我们是否需要以某种方式确保请求来自我们的应用程序,而不是欺骗应用程序或其他东西?

+1

作为对用户的礼貌,我永远不会这样做。在传输之前,加密用户名/密码并发送它非常容易。 – 2012-04-25 22:26:10

+0

所以,这个过程可能是...... 1。用户输入用户名/密码,2.我的应用程序加密发送,3.信息发送到服务器,4.服务器以某种方式验证加密的数据? – johnnietheblack 2012-04-25 22:27:46

+3

假设SSL,加密已经发生。您的问题正在验证请求本身,以确保它来自您的应用。 – mrlee 2012-04-25 22:30:11

回答

1

有几种可能的安全威胁,其中的任何一个,您可以决定是否要担心:http://xkcd.com/538/

但安全的原罪“在清除密码”。至少哈希它,以便它不存储在服务器上的明确。

+0

的确我们确实在服务器上散列它。我会检查该链接:) – johnnietheblack 2012-04-25 22:53:58

+0

下一步然后将哈希它之间的客户端和服务器,以防万一网站访问通过一个不安全的WiFi:http://xkcd.com/341/ – 2012-04-25 23:49:10

+0

OP说他们已经在使用SSL。 – Venge 2012-04-28 17:54:01

2

首先,相信自己是不够的。您将无法控制您的应用程序,即使用它的设备或与其连接的网络在您的用户手中。

一个方案,你应该在你的应用程序中有一个公用的共享密钥,只有你的服务器能够解密(如评论中所暗示的)仍然可能导致问题,因为拿到应用程序的用户可能会反向工程它并获得该密钥以针对其他用户。

如果您没有使用单点登录(SSO)对您的网站进行身份验证,但在表单中使用普通用户名和密码,则通过应用程序通过SSL/TLS连接传输它与做所以从浏览器(通过HTTPS),只要整体配置正确。无论如何,当您从浏览器发布表单时,就已经发生了这种情况。 按照您的建议使用SSL/TLS,您实际上并未清楚地发送您的密码(只要它已正确配置)。

检查它是否来自您的应用程序或欺骗应用程序是一个不同的问题,这是非常难以保护的一般。如果您的服务设计得很好,那么当您已经拥有用户身份验证时,往往不值得。经过身份验证的用户应该只能执行您的服务器允许他们执行的操作,无论这些操作的请求来自您的应用程序还是由这些用户控制的其他应用程序(只要服务器验证它们已通过身份验证)。 (欺骗应用程序对于用户本身来说往往是一个问题,如果他们被欺骗使用它们,而不是在这种情况下服务本身)。