当前位置: 首页 > 知识库问答 >
问题:

使用无状态(=无会话)身份验证时是否需要CSRF令牌?

向泽语
2023-03-14

当应用程序依赖于无状态身份验证(使用类似HMAC的东西)时,是否有必要使用CSRF保护?

示例

>

  • 我们有一个单页应用程序(否则我们必须在每个链接上添加令牌:...

    此内标识将用于访问诸如/admin之类的受限URL。

    令牌将始终在HTTP头内传输。

    没有Http会话,也没有cookie。

  • 共有1个答案

    孙宏扬
    2023-03-14

    我找到了一些关于CSRF+不使用Cookie进行身份验证的信息:

    >

  • https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
    “由于您不依赖于cookie,因此不需要针对跨站点请求进行保护”

    http://angular-tips.com/blog/2014/05/json-web-tokens-introduction/
    “如果我们按照cookies的方式进行操作,您确实需要执行CSRF以避免跨站点请求。正如您将看到的,在使用JWT时,我们可以忘记这一点。”
    (JWT=Json Web令牌,一种用于无状态应用程序的基于令牌的身份验证)

    http://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services
    “在不冒CSRF漏洞风险的情况下进行身份验证的最简单方法是直接避免使用cookie来识别用户”

    http://sitr.us/2011/08/26/cookies-are-bad-for-you.html
    “CSRF的最大问题是cookie对这种类型的攻击完全没有提供任何防御。如果您正在使用cookie身份验证,您还必须使用其他措施来防止CSRF。您可以采取的最基本预防措施是确保应用程序在响应GET请求时从不执行任何副作用。”

    如果您不使用Cookie进行身份验证,则会有更多的页面声明您不需要任何CSRF保护。当然,您仍然可以将Cookie用于其他所有内容,但要避免在其中存储session_id之类的内容。

    如果需要记住用户,有2个选项:

    >

  • localstorage:浏览器中的键值存储。即使在用户关闭浏览器窗口之后,存储的数据也将可用。其他网站无法访问这些数据,因为每个网站都有自己的存储空间。

    • 用户登录,然后将令牌存储在sessionstorage
    • 用户单击链接,该链接将加载一个新页面(=实际链接,没有javascript内容替换)
    • 您仍然可以从sessionstorage
    • 访问令牌
    • 要注销,您可以手动从SessionStorage中删除内标识,也可以等待用户关闭浏览器窗口,这将清除所有存储的数据。

    (这两者都可以在以下网址查看:http://www.w3schools.com/html/html5_webstorage.asp)

    令牌认证有什么官方标准吗?

  •  类似资料:
    • 我正在构建一个API,并试图在多个上下文中解决身份验证问题。 API需要为我们创建和部署的客户端应用程序提供服务,并使用密码处理经过身份验证的请求。在每个请求中都发送密码并不是一个好主意,因此首先点击登录endpoint并获得会话ID更有意义。问题中的webapp是用AngularJS编写的,应该在localStorage中跟踪自己的会话,以减轻会话劫持并消除对cookie的依赖以跟踪会话。 we

    • 一切工作都很正常,只是随机/偶尔地,尽管用户登录了,会话超时发生,系统注销了用户,尽管令牌有7天的有效期。 所以我决定尝试使系统没有任何会话而无状态。为此,我使用了以下命令: 根据禁用主题状态会话存储 然而,现在我根本无法登录。我得到了 我还没有找到任何完整的会话少四郎的例子。对我的代码有什么建议让它工作吗??我一定是错过了什么,但我不知道是什么。 为什么禁用会话后MyRealm无法从Userna

    • null 一些重要注意事项: 我们有传输安全性(HTTPS及其最好的朋友); 在窗帘后面,web应用程序代表当前用户将大量操作委托给外部服务(这些系统确实将Bob识别为其用户之一)--这意味着我们必须将Bob的凭据转发给它们。 现在,我们如何(在每个请求上)对Bob进行身份验证?哪一种方法会是实施这样的事情的合理方法呢? null null 非常感谢您花时间阅读以下内容:)

    • 我试图理解为什么JWT认证是无状态的。在有状态认证中,会有一个会话id。这里有一张JWT的代币,上面有签名。所以身份验证服务器发布JWT令牌,但是我可以说后续请求中JWT令牌的验证是由endpoint服务器(应用服务器)而不是身份验证服务器来完成的吗?我相信这是可能的,因为JWT是用截止日期(还有一些其他信息)签名的,并且认证服务器的公共证书对所有endpoint服务器都是可用的。 因此,认证服务

    • 我正在使用Spring Boot的最新版本,并且正在尝试设置StatelessAuthenticaion。到目前为止,我一直在读的教程非常模糊,我不确定我做错了什么。我使用的教程是... http://technicalrex.com/2015/02/20/Stateless-Authentication-with-spring-security-and-jwt/ code>TokenAuthen

    • 我一直有一个问题,即JWT是否真的安全?因为在对声明和有效载荷进行编码时,我们可以很容易地对令牌进行解码,并且在那里的网站上也很好地给出了这种解码。所以我的观点是,任何人都可以简单地使用burpsuite之类的工具更改auth头,并提供一些其他有效的令牌,对假用户进行身份验证。按照许多人的建议,将令牌存储在本地存储中也可能不太安全。所以我的问题是,与加密的cookie或会话相比,它真的是安全的吗?