我正在编写GWT应用程序,并且我被要求实现网站的用户管理部分。我对盐析,散列,加密和用户令牌有一点了解,但我从未阅读过任何有关该主题的书籍或论文。
我正计划进行无状态实现,这意味着保留用户标识符并在每次请求时将它们提交给服务器。不会使用服务器端会话数据。我正在看Apache Shiro,我喜欢低集成度,所以我不需要连接到复杂的框架。
我最担心的是拥有一个未过期的用户令牌。如果我给他们一个令牌并且他们永远不会注销,那么我希望令牌能够持续存在并且有效,以便他们可以在一夜之间打开网络浏览器,并且没有任何会话问题。
此计划是否会使网站容易受到攻击?
答案 0 :(得分:2)
如果您想要执行任何类型的用户登录,总会有一些状态需要保留在服务器上。唯一的问题是:该州居住在哪里?
显然,用户名和密码将保存在数据库中。会话令牌通常保存在应用程序服务器的内存中 - 但并非必须如此。您也可以将其保存在数据库中。
因为您的实现是无状态的,所以使用您当前的解决方案,您必须从数据库中为每个请求检索用户名和密码。您可以轻松更改此设置以检索令牌和时间戳。唯一重要的变化是,每个用户可能有多个会话,因此您需要为用户/令牌建立1:N关系。
答案 1 :(得分:1)
我打算做无国籍人 实施意味着保持 用户标识符并提交它们 每次请求都到服务器。没有 将使用服务器端会话数据。 我正在看Apache Shiro和我 喜欢低水平的整合所以 我不需要联系 复杂的框架。
当我复制某人的cookie时会发生什么?
当我破译标识符并进行更改时会发生什么? (它是一个int值吗?)
答案 2 :(得分:1)
首先:
如果您想编写安全网页,请阅读OWASP Top Ten。这是大多数Web应用程序漏洞的综合摘要。
第二
您的解决方案的主要问题是该令牌的到期时间。如果攻击者发现其价值,他将能够长时间冒充真实用户。当攻击者试图猜测一个令牌值时,它也容易受到暴力攻击。在几天内向真实用户询问密码然后更改令牌值是明智的。