我正在为我已经开始的项目创建一个应用程序和一个网站,但我不确定我应该怎么做才能登录.这不是"我是菜鸟,我想要一个登录的应用程序" -问题.我对网络,数据库和应用程序开发都有一定的经验,但除了应用程序模板之外,我从未真正触及过安全主题.
我想象的是一个像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.有些人建议这样做,但我们找不到任何适合我们的自定义用户计划的文档)