Sti*_*Sti 15 security authentication encryption objective-c ios
我正在为我已经开始的项目创建一个应用程序和一个网站,但我不确定我应该怎么做才能登录.这不是"我是菜鸟,我想要一个登录的应用程序" -问题.我对网络,数据库和应用程序开发都有一定的经验,但除了应用程序模板之外,我从未真正触及过安全主题.
我想象的是一个像Skype,Facebook,NetFlix这样的"简单"登录系统,真的是你能登录的任何应用程序,它还有一个登录的网站.
我的问题的一部分是关于过程的安全性.我最初的想法是,绝不应该通过互联网发送干净文本的密码,这使我相信在登录时,密码应该在手机上以及网站上进行散列/加密.我做了一些小事 - 之前的时间哈希/加密,但只是通过使用sha1和md5"转换"文本.这样做的正确方法是什么?根据我目前的知识,我假设如果我md5用来加密密码,任何人都可以解密它md5,但我可以使用SALT(?)或某种形式来改变密钥.这就是"大男孩"是如何做到的,还是有一个我不知道的秘密通道?
现在转到真正的问题 ..我应该如何安全地存储登录?
我曾经尝试过的:当在Xcode中为此做一个"测试项目"时,我只是创建了一个User带有字段的类username.当通过输入用户名和密码"登录"时,我只是向我的-page 发送了一个POST-method HTTP-request,.php它只执行了一个SELECT * FROM User WHERE Username = '$_POST['username']' AND Password = '$_POST['password']';如果数据库返回一行,那么密码是正确的,页面可以用JSON打印出用户管他呢.当设备成功登录后,我在应用程序中转换了用户对象,现在包含用户名(可能包含用户ID,电子邮件,地址等)NSData*,并使用NSKeyedArchiver和NSKeyedUnarchiver保存并加载用户,从不进行身份验证再次.如果用户单击"注销",我会擦除此"存档".这有效,但我觉得这不是一种特别安全的方式.如果是这样,为什么呢?
(我们的后端目前是Google的App Engine(java),它支持OAuth.有些人建议这样做,但我们找不到任何适合我们的自定义用户计划的文档)
密码传输
确保这一点的简单方法是通过 SSL 发送密码。如果您设置 SSL 证书并通过 https 进行所有身份验证,则所有来回通信均由传输层加密。注意 -md5不是加密算法,它是弱哈希算法 - 不要使用它来确保安全。
存储登录信息
您的密码应作为加盐哈希(随机盐,具有防冲突哈希函数,例如 SHA256)存储在数据库中。不要将明文版本的密码存储在任何地方。如果您在服务器端使用 PHP,则可以使用新password_hash()函数或crypt()生成并比较加盐哈希值。
如果您通过 SSL 进行安全通信,您应该能够仅使用 Web 服务器的会话功能来跟踪登录(例如,$_SESSION['user_id'] = ...)。
| 归档时间: |
|
| 查看次数: |
2389 次 |
| 最近记录: |