代码之家  ›  专栏  ›  技术社区  ›  meade

使用Ajax时通过身份验证的最佳方法

  •  1
  • meade  · 技术社区  · 15 年前

    我正在开发一个只通过Ajax下拉数据的页面: http://itprojectguide.org/projectmatrix/itprojectguideprojectmatrix.html

    该页当前提取一个状态JSON数据文件。

    要进行身份验证,我将添加一个初步登录(用户名/密码),并考虑执行以下操作以确保存在有效的登录用户:

    1. 登录时,发送用户ID和MD5密码-服务器将返回包含用户ID、登录日期和级别的加密字符串
    2. 我将把这个加密的字符串传递给所有的页面,每个页面将把字符串和页面类型发送给服务器-加密的字符串将被验证,以确保有效的用户和用户在过去24小时内(基于日期)已经登录。数据将根据用户的级别和用户所在的页面+任何页面特定的数据(如日期范围或公司ID,具体取决于日期)返回。

    使用加密的用户ID、登录日期、级别是否能确保适当的安全性?我不想用饼干…有更好的方法吗?

    这项工作的一部分是使用Ajax/JSON交互来检索每个页面的数据,而不是在服务器上呈现数据。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Vineet Reynolds    15 年前

    由于您正在滚动自己的会话管理逻辑,因此需要确保以下内容:

    • 服务器在身份验证后返回的字符串是不可猜测的。您可能正在对其进行加密以防止篡改,但您还必须考虑重播和劫持攻击。为此,大多数会话ID都是使用prng生成的。
    • 传输过程中保护字符串。这取决于您(或者更确切地说,您的客户)为应用程序中的数据分配的值。如果字符串可以从导致重大业务损坏的线中窥探出来,那么应该查看https。
    • 会话最终将到期。会话活动的时间越长,最终被发现的机会就越大。
        2
  •  1
  •   Jared Updike    15 年前

    您可以考虑使用一次性密码:

    http://en.wikipedia.org/wiki/One-time_password

    另外,如果你不能通过https运行东西,你可能会依赖于各种OpenID提供者的https,至少在初始登录时可以获得会话cookie。