bra*_*ler 22 security facebook login httprequest ios
经过广泛的研究,我无法找到我的问题的明确答案.首先,有人能告诉我处理连接到Web服务的本机iphone应用程序的"登录功能"的基本逻辑吗?例如,Facebook应用程序在启动后立即询问用户名和密码,从那里您可以在应用程序的所有后续视图中完全访问您的帐户.每次你发布的东西等,你都不必重新登录...有人可以向我解释这个过程吗?它是通过cookie还是会话完成的?Keychain参与了吗?
我现在有一个半工作的应用程序,但我几乎肯定我可以做得更好,更安全.这是我正在做的事情:
1)使用mysql设置具有用户数据库(用户名和密码列以及其他表等)的本地服务器.写了一个简单的Web服务,它接受POST数据并查询数据库以检查用户名是否存在......如果存在,那么密码是相同的.使用sha1散列.相应地回应真或假.
2)我的应用程序有一个初始登录屏幕,其中包含2个文本字段(1表示用户名,1表示密码)和一个调用登录方法的按钮.我的登录方法执行以下操作:
所以,我的问题是:
1)发送密码是否安全?(通过ASIHTTPRequest和POST方法?)2)在随后的视图中,用户应该能够与他们的帐户进行交互(比如在Facebook上发布消息和状态以及图片)如何保持用户的登录状态以便每个人都可以用户与数据库交互的时间,我可以确保用户仍然登录并且它是同一个用户?例如,我能想到这样做的唯一方法是,如果我使用用户名和密码在用户设备上存储cookie,然后每次与Web服务/数据库的连续交互,它都会使用cookie值进行身份验证(用户名)和密码).
必须有更好的方法来做到这一点?也许会议或饼干?或者使用钥匙串?
感谢帮助人员,对不起这个长期问题感到抱歉!
mom*_*omo 14
以下是基于我所知道的想法:
1) Is this secure for sending passwords? (via ASIHTTPRequest and the POST method?)
您需要确保通过https(SSL)而不是普通的Http发送此信息.原因是,您无法控制用户无线接入点的位置.如您所知,用户可以连接到属于特定黑客的开放接入点.传输它将使他能够嗅探数据包并获取访问WebService所需的信息,即使密码是经过哈希处理的.让它通过https发送将确保数据包使用强密钥加密.即使黑客设法嗅出数据包,在他/她能够解密消息之前需要很长时间.
2)在随后的视图中,用户应该能够与他们的帐户进行交互(例如在Facebook上发布>消息和状态以及图片)如何保持用户的登录状态>以便每次用户与数据库交互时,我可以确保用户仍然登录,并且它是同一个用户?
一种常用的方法是在用户登录后获取会话令牌.也就是说,您创建一个随机生成的ID,您在成功登录后返回该ID.然后,您将使用后端中的用户ID映射此标记,并将其与会话超时相关联.每次用户连接到Web服务时都会刷新此时间,并在一段时间后将其计时,以避免破坏安全性.然后,您可以在会话中保留会话令牌,然后将其用于后续呼叫.只要会话处于活动状态,用户就会登录.由于令牌与特定用户相关联,因此您还可以确保调用者的身份.
为了防止其他人使用其他人令牌,您需要SSL来保护频道并防止嗅探.假设您已经保护了连接通道,获取令牌的唯一方法是
映射是必需的,因此您可以验证令牌是通过登录活动与用户关联的真实令牌.此外,对于数字2,您可以提供远程擦除功能,该功能基本上会杀死映射并使该令牌无效.
此令牌的另一个非常重要的部分是令牌无法猜测并且必须是随机加密的(请参阅随机性建议的安全性).如果令牌仅基于伪随机性,则聪明的黑客可能能够猜测其算法并且可以猜测其下一个/上一个令牌并且有可能在表中获得任何有效令牌.
有许多算法可以生成此令牌.例如,Java编程语言提供SecureRandom类以提供加密随机性,而.NET具有类似的安全RandomGenerator类.
如果你想看看算法,OATH提出了 基于时间的一次性密码算法(TOTP),它是HOTP的扩展.大多数语言/平台都有加密强大的随机生成器,您可以立即利用它,而无需自己编写.
根据您的服务实现/平台,您可能想要问一个合适的类/模块用于加密随机生成器,例如这里提到的"如何使用php生成加密安全随机数"