保护来自 Inspect 元素的 Ajax 请求中的授权标头

Posted

技术标签:

【中文标题】保护来自 Inspect 元素的 Ajax 请求中的授权标头【英文标题】:Securing Authorization Header in Ajax Request from Inspect Element 【发布时间】:2019-02-04 01:01:28 【问题描述】:

我需要一些关于如何在使用 ajax 提交表单时保护 JWT 令牌的意见,这就是它在 google chrome 检查元素上的外观 inspect element on chrome browser 令牌是可见的,未知用户可以将一些数据发布到其端点,有什么想法可以保护 JWT 令牌吗?任何意见赞赏,谢谢! 使用 HTTPS 解决此问题?

【问题讨论】:

一般登录后会得到jwt token,所以只有登录用户才能看到。 感谢您的回答,是的,这就是使用 JWT 的想法,但在这种情况下,我为注册会员建立了前台网站,所以我认为我应该使用令牌保护 API 以防止恶意和未经身份验证用户。仅供参考:我传递给 ajax 的令牌是作为主应用程序的用户,还有什么建议吗? 但是还是……是登录后生成的jwt token? 是的,但是登录功能在后端(laravel)中起作用,并且使用“应用程序 API”的登录凭据,当我返回视图时它也传递了令牌,我知道这很奇怪因为令牌是公开的.. 【参考方案1】:

普通用户使用用户名/密码(或其他)登录,如果他登录成功,那么服务器将返回他可以用于其他请求的 jwt 令牌。 所以 jwt 应该已经是安全的了(除非未经身份验证的用户可以进入私人区域,但是你还有其他问题需要解决)。 如果您不希望 jwt 在您的 js 代码中可见,您可以将令牌存储在服务器会话中,然后以伪代码进行 ajax 调用以检索令牌:

$.ajax(
  type: "POST",
  url: "/myscript.php",
  data: action : "GetToken",
  dataType: "json",
  success: function(token)
     // now you can do whatever you want with the token, if any.
  ,
  error: function()
  

.php

<php 
   if isset($_POST["action"] && $_POST["action"] == "GetToken")
    echo $_SESSION["userToken"];
 
?>

显然,您必须在创建令牌时将其保存在 $_SESSION 中。

【讨论】:

感谢您的精彩解释,想象一下,如果您有一个注册表和公开的注册表以便任何人都可以在您的网站上注册,那么您使用什么样的身份验证来确保没有其他人使用您的注册 API? 视情况而定,api适用于所有注册用户? 所以只要求登录或注册后自动登录用户 注册后自动登录用户

以上是关于保护来自 Inspect 元素的 Ajax 请求中的授权标头的主要内容,如果未能解决你的问题,请参考以下文章

如何保护移动和 AJAX 调用的 JSON RESTful API?

如何允许仅由站点调用 php 文件,而不是 Inspect Element 或 URL

HTML中ajax表单提交CSRF保护

Laravel CSRF 保护下的 JQuery AJAX 跨站请求

如果 JSF 页面受 j_security_check 保护,则不会在 ajax 请求上引发 ViewExpiredException

来自 for 循环内的 AJAX 链中最后一个 AJAX 请求的返回值