小编Gab*_*yel的帖子

JWT 刷新令牌的全部意义是什么?

我已经读了一段时间了,没有任何意义,而且解释相互矛盾,评论证明了这一点。

到目前为止,我的理解是 JWT 存储由服务器编码的信息,可以有过期时间,并且服务器及其密钥可以解码其中的信息(如果它有效)。说得通。

它对于可扩展性很有用,因此独立的 API 可以解码并验证令牌中的信息,只要它们拥有密钥。此外,不需要将信息存储在任何数据库中,这与会话不同。说得通。

如果令牌被盗,API 无法判断令牌是否由正确的人使用。这是上面的缺点。

通过减少令牌的过期时间,可以减少安全漏洞,从而减少窃贼未经许可使用令牌的时间。(附带问题,但如果他们能够偷一次,他们可能也会偷第二次)

但是减少令牌的有效时间意味着每次令牌过期时用户都需要登录,并且如上所述,这种情况相当频繁,因此不会提供太好的用户体验。说得通。

从现在开始,一切都没有意义了:

引入刷新令牌可以解决这个问题,因为它的过期时间更长。使用刷新令牌可以生成访问令牌,因此只要用户拥有刷新令牌(时间较长)就可以登录,而被盗的访问令牌仍然仅在短时间内有效。

对我来说,上述内容似乎增加了一层额外的复杂性,而安全性没有任何改进。即对我来说,上面的内容似乎等于一个长期存在的访问令牌。

为什么?因为对我来说,刷新令牌基本上是一个访问令牌(因为这就是它生成的)。因此,拥有刷新令牌意味着无限制的访问令牌,因此无限制地访问 API。

然后我读到一个答案,刷新令牌和访问令牌是一对一的映射,因此窃取访问令牌仍然意味着对 API 的未经授权的访问,但只持续很短的时间,并且窃取刷新令牌将生成不同的访问令牌,以便 API 可以检测到异常(同一帐户使用不同的访问令牌),从而使访问令牌失效。

看来我不是唯一一个对这个问题感到困惑的人。

如果上述情况不正确,刷新令牌有何真正帮助?

如果上述情况成立,并且确实存在刷新令牌和访问令牌的一对一映射:

  • 它完全失去了“无国籍”的好处
  • 用户无法从多个设备登录(这将是“异常”)
  • 我无法理解访问令牌如何失效 - 令牌数据中是否存储了会话 ID,或者用户被“阻止”?

如果有人能澄清这个问题那就太好了,因为从 5 个解释中,有 5 个相互冲突的陈述(有时相同的解释包含冲突的信息),并且许多开发人员都想了解这种方法。

security authentication access-token jwt refresh-token

28
推荐指数
1
解决办法
7054
查看次数

如何将CSRF令牌从服务器传递到客户端?

这听起来像是一个愚蠢的问题。我想弄清楚这一点。如果令牌首先发送到客户端并且客户端发回相同的令牌,那么 csrf 令牌如何帮助识别跨站点请求?恶意客户端不会从服务器获得响应。

如果我们在发送令牌的同时检查来源,那么令牌检查的事情是不是显得多余?

我们如何确保服务器只会将令牌提供给授权的客户端,以及将令牌从服务器传输到客户端的最佳实践是什么?

我在这里问了一个相关的问题但需要更深入地了解它。所以在这里问一个不同的问题。

希望通过例子得到一些答案。

先感谢您

security csrf

8
推荐指数
1
解决办法
6153
查看次数

Rails:使用 link_to 和给定 href 的模型属性时防止 XSS

考虑以下 link_to 示例:

link_to "Personal Website", @user.website

我如何保护它免受 XSS 攻击。用户表在外部数据库中,所以我不能相信它。我尝试过使用 sanitize 和 h 的不同方法,但是当我在本地数据库用户网站中替换javascript:alert('XSS')为 时,当我单击链接时,javascript 仍在执行。

提前致谢,

security xss ruby-on-rails href link-to

5
推荐指数
1
解决办法
745
查看次数

使用Rails ActiveStorage删除旧版本

我有一个类似照片存储的应用程序(Rails 5.2),它使用ActiveStorage来存储实际的照片。一切都很好,我为用户生成了带水印的缩略图,以作为变体显示(原始信息不是公开的,实际上每个图像需要一些变体)。

如果必须更改生成此类变体的方式怎么办?S3存储并不便宜(图像数量在成千上万个),并且ActiveStorage根本不跟踪变体-它们仅由我精确生成它们的哈希值来识别。如果我更改变体哈希(例如更改缩略图大小),则会创建新的哈希,但是很多旧的blob将保留在未引用的存储中。

这里也描述相同的问题,但没有解决方案。

您如何处理旧版本?我希望变量存储能够像缓存一样工作,尤其是我的用户通常不会查看旧图像。如果某个变体比给定年龄大,我只想删除它-但我无能为力。还是我

  • 我可以看一下存储中的实际blob-但没有区别,也没有元数据。在S3中,所有这些文件看起来都一样,关键只是其制作方式的哈希值,并且没有相关的元数据。

  • 硬编码所有先前的变体生成的哈希值以在所有先前的映像上重新运行绝不是要走的路。

  • 我也许可以在ActiveStorage中打补丁(Variation也许?)来添加元数据(指示哪些blob是变量,哪些是原始对象)?然后,我可以进行后端作业以删除旧版本。这行得通吗?如何使它与ActiveStorage的将来版本兼容?

  • 我应该自己跟踪变体吗?那么为什么在ActiveStorage中它不是一个选项?显然,这也需要更改ActiveStorage类。

  • 是否可以将变体存储在其他存储中(例如另一个S3存储桶)?这也将解决问题,因为我随后将知道哪些斑点是变体,并且可以轻松清除旧斑点。

你们如何处理旧的不必要的变体?

ruby-on-rails rails-activestorage

5
推荐指数
1
解决办法
246
查看次数

为什么我启用 csrf 时收到 401 错误?

因此,我正在开发我的第一个全栈应用程序(Spring Boot Rest API 和 Vue.js 前端),并且我在使用 sonarqube 时遇到了一个问题。我的声纳发出以下警告:

确保在这里禁用 Spring Security 的 CSRF 保护是安全的。

它来自这个文件:

@Configuration
@AllArgsConstructor
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class
WebSecurityConfig extends WebSecurityConfigurerAdapter {//provides security for endpoints

    @Autowired
    private JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;

    @Autowired
    private UserDetailsService jwtUserDetailsService;

    @Autowired
    private JwtRequestFilter jwtRequestFilter;

    private final AccountService accountService;
    private final BCryptPasswordEncoder bCryptPasswordEncoder;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        // configure AuthenticationManager so that it knows from where to load
        // user for matching credentials
        // Use BCryptPasswordEncoder
        auth.userDetailsService(jwtUserDetailsService).passwordEncoder(bCryptPasswordEncoder);
    } …
Run Code Online (Sandbox Code Playgroud)

security csrf http-status-code-401 spring-boot

5
推荐指数
1
解决办法
2674
查看次数

如何使用 Postman Rest Client 获取和重用 CSRF 令牌

我正在使用 Postman Rest 客户端来访问其余服务。当我尝试从 Postman 客户端执行其余服务时出现以下错误。

HTTP Status 403 - Cross-site request forgery verification failed. Request aborted.
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

其余服务似乎由 CSRF 令牌的实现来保护。有没有人知道如何获取 CSRF 令牌并将其重用于未来的请求?

security rest web-services csrf postman

4
推荐指数
2
解决办法
4万
查看次数

在没有用户或登录的情况下我是否需要 CSRF 保护?

我正在构建一个 Django 应用程序,人们可以在其中注册活动。每个人都可以注册,没有用户帐户或登录,即没有身份验证。验证是通过一封带有链接的电子邮件完成的,必须单击该链接才能激活注册。我不确定是否需要为这些表单启用 CSRF 保护。归结为以下问题:CSRF 保护对于每个 POST 请求(不离开域)都是必要的,还是仅对于登录用户的 POST 请求是必要的?

CSRF 攻击可以做什么?我知道您可以使用它来规避同源策略并以用户的名义发布您想要的任何内容,但是您也可以使用它来更改用户的真实帖子或窃取他们的数据吗?如果恶意网站可以了解用户发布的数据或悄悄地更改他们的请求,这将是我使用它的理由。如果这只是意味着另一个网站可以创建额外的注册,那么就不行,因为其他人也可以。(我知道在任何地方使用它并不花费太多,事实上我可能会这样做,但我试图更好地理解原理)

security django csrf

4
推荐指数
1
解决办法
2150
查看次数

.NET Framework 4.7 Web 应用程序中的 AntiXSS - 如何应用它

我创建了一个在 .NET 4.7.2 上运行的简单 .NET Web 表单应用程序。

该应用程序有一个文本框、一个提交按钮和一个标签。当您单击提交按钮时,应用程序将显示文本框内容。

在此输入图像描述

为了使该应用程序容易受到跨站点脚本攻击,我在其 web.config 中禁用了请求验证 (validateRequest=false)。这允许我在文本字段中输入值: XSS<img src=x onerror=confirm("HACKED")> 并提交。

在此输入图像描述

单击“提交”后,我会看到弹出窗口

在此输入图像描述

为了防止 XSS 攻击,我获取了 AntiXss 库的 NUGet 包,并按照Microsoft AntiXss 文档中的说明在我的 web.config 中引用它。

在此输入图像描述

然而,没有任何编码,并且我的 Web 应用程序仍然容易受到 XSS 攻击,直到我在代码中显式编码该值。

        protected void Button1_Click(object sender, EventArgs e)
        {
            //Label1.Text = TextBox1.Text;
            Label1.Text = AntiXssEncoder.HtmlEncode(TextBox1.Text,true);

        }
Run Code Online (Sandbox Code Playgroud)

通过使用 AntiXss 库编码的值,应用程序现在显示该值而不是执行该脚本并创建弹出窗口。

在此输入图像描述

所以我有三个问题:

  1. web.configencoderType="System.Web.Security.AntiXss.AntiXssEncoder" 的真正作用是什么,因为无论我将其放入还是从 web.config 中删除,它都不会改变我的测试结果。根据Micrsoft 文档,这设置了 HTML 和 URL 编码任务的默认处理程序。
  2. 如果我必须对每个文本字段进行编码以防止 XSS 攻击,是否有一种站点范围的方法对其所有字段进行编码?对于一个拥有数百个页面、大量输入字段遍布各处并且必须逐一进行 HTMLEncode 的网站(不是 MVC)来说,这似乎不是一个实用的解决方案。
  3. 除了显示标准 .NET 检测危险请求页面之外,validateRequest 如何与 XSS 防护配合使用?我可以将其捕获为异常并在我的页面上显示错误消息,而不是显示如下所示的默认错误页面吗?

.net c# security xss

4
推荐指数
1
解决办法
8243
查看次数

Rails API 应用程序的 CSRF 令牌

在 Rails API 应用程序中,我们没有现成的 CSRF 保护。特别是,不建议将访问令牌(例如 JWT)存储在 localStorage 中,建议存储在 cookie 中(带有 httpOnly 标志、SameSite 等)。但这一次我们很容易受到潜在的 CSRF 攻击。在全栈生成的 Rails 应用程序中,每次打开表单时都会生成并嵌入一个 CSRF 令牌。但是,我不知道也找不到任何我们如何在 Rails API 应用程序中使用令牌来防止 CSRF 的信息。我们有最佳实践吗?或者有人可以建议一种方法吗?我使用访问和刷新 JWT。

security ruby-on-rails csrf rails-api csrf-token

3
推荐指数
1
解决办法
2161
查看次数

如何在 ajax POST 请求中设置标头以包含 CSRF 令牌

帮助设置标题以消除该错误消息: "Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'."

HTML:

<meta name="_csrf" th:content="${_csrf.token}"/>
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>
Run Code Online (Sandbox Code Playgroud)

我的JS代码:

var recipe = getRecipe();

var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
console.log(token);
console.log(header);
console.log(recipe);

var headers = {};
// How set up header for include CSRF-Token

$.ajax({
    url: "/recipe",
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    headers: headers,
    data: JSON.stringify(recipe, null, "\t"),
    success: function(data) {
        console.log(data);
    },
    error : getErrorMsg
});
Run Code Online (Sandbox Code Playgroud)

我的控制器代码:

 @RequestMapping(value = "/recipe", method = …
Run Code Online (Sandbox Code Playgroud)

security ajax csrf spring-security

2
推荐指数
1
解决办法
4663
查看次数

如何检查电子邮件是否确实存在

我创建了一个表格,您必须在其中插入电子邮件地址。

我已经有一种验证方法。但是我需要确保电子邮件确实存在。

可能吗?

java email android email-validation

1
推荐指数
1
解决办法
1551
查看次数

React 并将 jwt 令牌存储在本地存储中

我最近刚刚开始在react+express应用程序中使用jwt,并遇到了在哪里存储jwt令牌的问题。看来两个主要选项是 localStorage 和 cookies,它们都容易受到各种攻击(XSS 和 CRSF)。

但我发现react据说是XSS安全的(他们说React受XSS保护是什么意思?)那么可以使用localStorage来存储jwt吗?如果不是,行业标准是什么?

security xss local-storage jwt reactjs

1
推荐指数
1
解决办法
5106
查看次数