创建安全web登录的最佳方式


Best way to create a secure web login?

我在安卓系统中制作了一个需要登录我制作的网站的应用程序,但我正在讨论什么是最好和安全的方法。我也有自己的想法,但不确定如何实现。我只是问如何实现"嘿,我登录了"的想法。不是验证/存储/转义字符串的部分。只问如何在用户和服务器之间创建安全会话。

从我在谷歌上看到的情况来看,大多数/所有方法都使用全局php$_SESSION变量,但显然这有很多安全问题,所以我想根本不要使用它。

大型网站做什么?像gmail?他们是怎么做到的?他们是如何实现"记住我"选项的?我认为他们每次登录都会给你一些代币,对吗?

最后,我有自己的想法,想知道你怎么看:当用户登录时,他会得到一个由他的凭据和一些随机值组成的代码,所有这些都会被散列(sha256)。他会把它保存在他的shared preferences中。此代码也将存储在服务器的"已登录"数据库中。现在,每次他查询服务器时,都必须发送他得到的代码。

你觉得呢?

谷歌和其他服务为用户的安全做了"很多"工作,我们真的不知道他们到底做了什么。这里有一些建议,仅供参考。

  1. 对用户输入进行消毒(http://php.net/manual/en/filter.filters.sanitize.php)
  2. 使用PHP内置的密码哈希算法对密码进行哈希和验证(http://php.net/manual/en/function.password-hash.php)
  3. 使用准备好的语句访问数据库(http://php.net/manual/en/pdo.prepared-statements.php)
  4. 在数据库中使用令牌列。每次用户登录时生成一个唯一的令牌,并使用该令牌验证用户会话
  5. 用户注销时重置令牌

如果您使用PHP编写登录,$_SESSION应该可以。PHP将自动为用户创建cookie,并且您在$_SESSION中存储的任何内容都将仅在服务器端可用,因此无需在客户端生成自己的令牌。