如何保护 API access_token(React,Laravel)
How to Secure API access_token (React, Laravel)
我正在开发一个应用程序(前端:React,后端:Laravel)。当我发出登录请求时,我从 Laravel 服务器获得 access_token。我将这个 access_token 保存在 localStorage 中。
现在的问题是任何人都可以在浏览器的开发人员工具中看到 access_token。 access_token 在请求 headers 中也可见。
如果用户有一段时间不在他的座位上,那么其他用户可以窃取这个 access_token 并粘贴到他的浏览器中,现在其他用户将能够作为第一个用户访问该应用程序.此外,我在其他网站上看到一些关于 localStorage 容易受到 XSS 攻击的讨论。
我的问题是这个 access_token 应该存储在哪里。如果我将 access_token 保存在某些 javascript 变量中,那么当用户关闭并重新打开浏览器或用户刷新页面时,access_token 将丢失。并且会要求他重新登录,很不利于用户体验。
如何保护 access_token 免受未经授权的访问?最佳做法是什么?
尽管在 facebook 和其他网站中也可能存在这种劫持,但这里有一些建议
选项 1
- 为您的实际应用制作一些着陆页。
在该着陆页上添加一些按钮,以通过使用 java 脚本打开新的 window 来打开具有一些动态令牌身份验证的实际网站,并使用受限的浏览器选项,例如
www.yoursite.com/secure_login?abc=3jfj834y7827875448548hffhjdhfd8
直接浏览link(www.yoursite.com/secure_login)报错。您的动态令牌将用作会话密钥等。它就像 CSRF 功能一样。
- 在您的网站上禁用右键单击和 F12。
- 如果 java-script 在浏览器设置中被禁用,请不要打开您的网站。因此,强制用户首先启用 java-script。
- 现在很难去inspect-element
选项 2
- 使用蜜点名称制作多个 access_token 类密钥,例如security_key、authourization_token、access_token、login_session 等。您的实际密钥必须不同于 Web 框架中全局使用的默认密钥。
- 用一些随机值初始化它们并应用一些加密,如 sha256 等
- 使用刷新令牌概念,因为您的会话字符串将不断刷新和更改
- 检查发出请求时是否丢失了这些令牌中的任何一个,然后阻止该 IP 一段时间(例如用于防止暴力附加的登录限制)
- 现在这样,如果你假设有 12 个键,但实际上只有一两个键被使用,则很难获得所有变量(就像你提到的,如果用户离开座位一段时间),你可以用多个名称来愚弄他们。
- 您甚至可以实际使用这些多个会话
- 您还可以缩短到期时间
我正在开发一个应用程序(前端:React,后端:Laravel)。当我发出登录请求时,我从 Laravel 服务器获得 access_token。我将这个 access_token 保存在 localStorage 中。
现在的问题是任何人都可以在浏览器的开发人员工具中看到 access_token。 access_token 在请求 headers 中也可见。
如果用户有一段时间不在他的座位上,那么其他用户可以窃取这个 access_token 并粘贴到他的浏览器中,现在其他用户将能够作为第一个用户访问该应用程序.此外,我在其他网站上看到一些关于 localStorage 容易受到 XSS 攻击的讨论。
我的问题是这个 access_token 应该存储在哪里。如果我将 access_token 保存在某些 javascript 变量中,那么当用户关闭并重新打开浏览器或用户刷新页面时,access_token 将丢失。并且会要求他重新登录,很不利于用户体验。
如何保护 access_token 免受未经授权的访问?最佳做法是什么?
尽管在 facebook 和其他网站中也可能存在这种劫持,但这里有一些建议
选项 1
- 为您的实际应用制作一些着陆页。
在该着陆页上添加一些按钮,以通过使用 java 脚本打开新的 window 来打开具有一些动态令牌身份验证的实际网站,并使用受限的浏览器选项,例如
www.yoursite.com/secure_login?abc=3jfj834y7827875448548hffhjdhfd8
直接浏览link(www.yoursite.com/secure_login)报错。您的动态令牌将用作会话密钥等。它就像 CSRF 功能一样。
- 在您的网站上禁用右键单击和 F12。
- 如果 java-script 在浏览器设置中被禁用,请不要打开您的网站。因此,强制用户首先启用 java-script。
- 现在很难去inspect-element
选项 2
- 使用蜜点名称制作多个 access_token 类密钥,例如security_key、authourization_token、access_token、login_session 等。您的实际密钥必须不同于 Web 框架中全局使用的默认密钥。
- 用一些随机值初始化它们并应用一些加密,如 sha256 等
- 使用刷新令牌概念,因为您的会话字符串将不断刷新和更改
- 检查发出请求时是否丢失了这些令牌中的任何一个,然后阻止该 IP 一段时间(例如用于防止暴力附加的登录限制)
- 现在这样,如果你假设有 12 个键,但实际上只有一两个键被使用,则很难获得所有变量(就像你提到的,如果用户离开座位一段时间),你可以用多个名称来愚弄他们。
- 您甚至可以实际使用这些多个会话
- 您还可以缩短到期时间