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

有必要针对CSRF保护JAX-RS请求吗?

唐炳
2023-03-14

有必要针对CSRF保护JAX-RS请求吗?

根据定义,REST是无状态的,因此不存在会话id(会话cookie),因为根本没有会话(另请参阅)https://stackoverflow.com/a/15746639/5277820).

我的Spring Security Java配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Configuration
    @Order(1)
    public static class JaxRsWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(final HttpSecurity http) throws Exception {
            http
                .antMatcher("/services/**")
                .csrf().disable()
                .authorizeRequests()
                    .antMatchers(HttpMethod.OPTIONS, "/services/**").permitAll()              
                    .anyRequest().hasAuthority("ROLE_user")
                    .and()
                .httpBasic()
                    .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
             }
        }
    }
}

但我发现,例如以下博客:无状态Spring Security第1部分:无状态CSRF保护。不幸的是,博客没有解释为什么需要CSRF保护。

在没有会话cookie的情况下是否存在其他CSRF攻击?

共有2个答案

戚阳
2023-03-14

访问令牌有时存储在一个(安全超文本传输协议——充其量只有)cookie中,这样客户端就不必费心在每个请求中手动添加它:浏览器会自动将cookie附加到请求中。这就是为什么需要实施CSRF保护的原因。

您链接的文章建议让客户端在Cookie和自定义HTTP头中生成并发送相同的唯一机密值,这非常聪明:

考虑到一个网站只允许为自己的域读/写Cookie,只有真正的网站才能在两个标题中发送相同的值。

也就是说,如果你收到一封带有虚假图像的电子邮件,目标是http://yourserver.com/admin/deleteAll例如(服务器通过GET…)处理它),请求头中不会设置唯一机密(cookie中仍可能存在旧机密):服务器必须拒绝请求。

逑彬炳
2023-03-14

CSRF攻击不需要会话就可以存在。CSRF攻击是指通过诱骗用户点击链接或提交表单,并将其发送至用户登录的应用程序,从而代表用户进行操作。

是否使用基本身份验证或会话cookie来识别用户无关紧要。

请注意,使用cookie并不意味着应用程序不是无状态的。cookie与基本身份验证一样,只是在每个HTTP请求中发送一个额外的头。

 类似资料:
  • 保安。今天,任何应用程序如果没有适当的安全性编程--无论是由开发人员使用的框架,还是由开发人员自己编程--都无法在internet上生存。我目前正在开发一个使用承载令牌身份验证的RESTful API,但一直在阅读有关XSS和CSRF攻击的内容。 问题1)从我所读到的内容中,我看到使用基于令牌的身份验证的RESTful API的应用程序容易受到XSS而不是CSRF的攻击,如果令牌存储在浏览器的Lo

  • 我想在我的JAX-RS RESTful服务上实现OAuth2.0授权。 经过一些研究,我找到了Apache CXF来做这件事。但是,我还没有找到任何关于它的例子,对我来说也不清楚。在哪里可以找到一些使用OAuth2.0的JAX-RS示例?

  • CSRF是指针对Web应用程序的跨站点伪造攻击。 CSRF攻击是系统的经过身份验证的用户执行的未授权活动。 因此,许多Web应用程序容易受到这些攻击。 Laravel以下列方式提供CSRF保护 - Laravel包含一个内置的CSRF插件,可为每个活动用户会话生成令牌。 这些令牌验证相关的经过身份验证的用户是否发送了操作或请求。 实现 (Implementation) 本节将详细讨论Laravel

  • 简介 Laravel 可以轻松地保护应用程序免受 跨站点请求伪造 (CSRF) 攻击,跨站点请求伪造是一种恶意攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令。 Laravel 会自动为每个活跃用户的会话生成一个 CSRF「令牌」。该令牌用于验证经过身份验证的用户是否是向应用程序发出请求的用户。 无论何时,当您在应用程序中定义HTML表单时,都应该在表单中包含一个隐藏的CSRF标记字段,

  • 问题内容: 我希望能够从请求中打印JAX-RS 2 JSON有效负载,而不管我的应用程序服务器上的实际实现如何。 我已经尝试过在SO上提出建议的解决方案,但是所有解决方案都包含实际实现中的二进制文件(例如Jersey和类似文件),并且只允许在我的应用程序中使用javaee- api v 7.0。 我尝试在我的客户端上实现ClientRequestFilter和ClientResponseFilte

  • 我们正在使用JAX RS为我们的一个项目实现一个REST API。要求是用户将以JSON格式传入请求对象。 让我们假设我们有一个在命中APIendpoint时调用的方法 示例请求对象: { “firstName”:“Test”, “lastName”:“Name”, “sno”:“A123” } 吸气剂和setter 现在,如果用户尝试向上面给出的请求对象添加其他参数(例如:“age”)并调用ap