NSURLSession 密码安全
NSURLSession password security
人们需要登录才能开始使用我的应用程序。他们可以在我的网站上注册,他们的密码使用 Bcrypt 存储。当他们登录应用程序时,我将 GET 请求 (https://website.com/file.php?pass=password) 中的纯文本密码传输到 php 文件,该文件再次使用 Bcrypt 将密码与存储在我的数据库中的密码进行比较。我的网站始终使用 SSL 证书和 HTTPS 连接。所以我的 NSURL 以 HTTPS 请求开头。我的问题是,这种方式足够安全还是完全不安全?如果是这样,您建议如何验证用户的登录?
如果服务器使用 TLS 1.2 和完全前向保密,则 HTTPS 是安全的。此外,如果服务器使用双因素身份验证并且第二个因素得到很好的控制。
但您还需要在您的应用中固定证书以防止 MITM 攻击。
我认为使用 HTTPS 是一个很好的开始。正如 zaph 指出的那样,您可能需要检查以确保您的服务器使用的是 TLS 1.2。
不过,我同意 SLaks,并反对 GET
请求。 Section 9.4 of RFC 7231 警告“服务的作者应该避免使用基于 GET
的表单来提交敏感数据,因为该数据将被放置在请求目标中。许多现有的服务器、代理和用户代理记录或在第三方可能可见的地方显示请求目标。此类服务应改为使用基于 POST
的表单提交。“
当您考虑 NSURLSession
安全性时,我建议您确保在用户身份验证期间不进行任何缓存,甚至可能使用 ephemeral session,这样您竭尽全力加密的数据不会无意中未加密地存储在其他地方。
我可能还建议观看 WWDC 2015 视频 Security and Your Apps, Privacy and Your App, and Networking with NSURLSession。这些并没有直接解决您的问题,但确实涉及一些更广泛的 security/privacy 问题。
人们需要登录才能开始使用我的应用程序。他们可以在我的网站上注册,他们的密码使用 Bcrypt 存储。当他们登录应用程序时,我将 GET 请求 (https://website.com/file.php?pass=password) 中的纯文本密码传输到 php 文件,该文件再次使用 Bcrypt 将密码与存储在我的数据库中的密码进行比较。我的网站始终使用 SSL 证书和 HTTPS 连接。所以我的 NSURL 以 HTTPS 请求开头。我的问题是,这种方式足够安全还是完全不安全?如果是这样,您建议如何验证用户的登录?
如果服务器使用 TLS 1.2 和完全前向保密,则 HTTPS 是安全的。此外,如果服务器使用双因素身份验证并且第二个因素得到很好的控制。
但您还需要在您的应用中固定证书以防止 MITM 攻击。
我认为使用 HTTPS 是一个很好的开始。正如 zaph 指出的那样,您可能需要检查以确保您的服务器使用的是 TLS 1.2。
不过,我同意 SLaks,并反对 GET
请求。 Section 9.4 of RFC 7231 警告“服务的作者应该避免使用基于 GET
的表单来提交敏感数据,因为该数据将被放置在请求目标中。许多现有的服务器、代理和用户代理记录或在第三方可能可见的地方显示请求目标。此类服务应改为使用基于 POST
的表单提交。“
当您考虑 NSURLSession
安全性时,我建议您确保在用户身份验证期间不进行任何缓存,甚至可能使用 ephemeral session,这样您竭尽全力加密的数据不会无意中未加密地存储在其他地方。
我可能还建议观看 WWDC 2015 视频 Security and Your Apps, Privacy and Your App, and Networking with NSURLSession。这些并没有直接解决您的问题,但确实涉及一些更广泛的 security/privacy 问题。