在启用内容类型协商时,JAXRS休息服务是否容易受到CSRF攻击?

ope*_*eek 4 rest web-services jax-rs csrf

我有一个RESTful API,其注释类似@Consumes(MediaType.JSON) - 在这种情况下,CSRF攻击是否仍然可以在这样的服务上进行?我一直在修补我在服务器端使用CSRFGuard保护我的服务,或者从客户端进行双重提交.但是,当我尝试使用带有enctype ="text/plain"的FORM来发送请求时,它不起作用.这里解释这种技术.如果我在使用注释中有MediaType.APPLICATION_FORM_URLENCODED,则此方法有效.当我使用POST/PUT/DELETE谓词时,内容协商非常有用,但GET仍然可以访问,可能需要查看.

任何建议或输入都会很棒,如果您需要更多信息,请告诉我.

干杯

Dmi*_*tri 9

JAX-RS旨在创建应该是无状态的REST API.跨站点请求伪造不是无状态应用程序的问题.

Cross Site Request Forgery的工作方式是有人可能会欺骗您点击链接或在您的浏览器中打开一个链接,该链接将引导您进入您登录的网站,例如某些在线论坛.由于您已经登录该论坛,攻击者可以构建一个URL,例如:someforum.com/deletethread?id = 23454

该论坛程序设计糟糕,会根据会话cookie识别您,并确认您有能力删除该线程,并且实际上会删除该线程.

所有这些都是因为程序根据会话cookie验证了你(甚至基于"记住我"的cookie)

使用RESTful API,没有cookie,请求之间不维护状态,因此不需要防止会话劫持.

您通常使用RESTFul api进行身份验证的方式是发送一些额外的标头.如果有人欺骗你点击指向宁静API的网址,浏览器就不会发送额外的标题,所以没有风险.

简而言之 - 如果REST API按照它应该的方式设计 - 无状态,则不存在跨站点伪造的风险,也不需要CSRF保护.

  • 您的RESTful API可能位于安全框架之后,例如spring security,这意味着您需要通过框架进行身份验证.在这种情况下,它会编写一个cookie来识别您是经过身份验证的用户.一旦识别出用户,就可以获得对GET/POST/DELETE/PUT数据的常规服务调用.因此,在这种情况下,服务本身不是无状态的,但是服务是在具有状态的安全框架之后.无论如何,我的主要兴趣是检查是否有人能够在启用内容类型协商时执行CSRF攻击,因为我无法破解它. (5认同)