스프링 보안, 상태 비저장 REST 서비스 및 CSRF
저는 Java, Spring-boot 및 Spring Security와 Basic Access Authentication을 사용하여 구축된 REST 서비스를 가지고 있습니다.Views, JSP 등, '로그인'은 없으며 별도로 호스팅된 React 앱에서 호출할 수 있는 상태 비저장 서비스만 있습니다.
CSRF 보호에 대한 다양한 설명서를 읽었지만 스프링 보안 CSRF 구성을 사용해야 할지 아니면 사용하지 않도록 설정해야 할지 결정할 수 없습니다.csrf 보호를 비활성화하면 다음과 같은 기본 인증을 사용하여 curl로 서비스를 호출할 수 있습니다.
curl -H "authorization:Basic c35sdfsdfjpzYzB0dDFzaHA=" -H "content-type:application/json" -d '{"username":"user","password":"password","roles":"USER"}' localhost:8081/api/v1/user
하고 csrf 파일을 x-csrf-token
내에) " "CsrfFilter" ("CsrfFilter")에 이 값을 합니다.HttpServletRequest
그러나 상태 비저장 REST 서비스이기 때문에 세션이 없고 '로그인'하지 않았습니다.
다음과 같은 구성 클래스가 있습니다.
@EnableWebSecurity
@Configuration
public class ServiceSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().fullyAuthenticated()
.and().httpBasic();
if (!serviceProperties.isCsrfEnabled()) {
http.csrf().disable();
}
}
생각할수록 CSRF 보호를 해제해야 할 것 같습니다.스프링 보안을 구성하여 작동하는 다른 방법이 있습니까?
감사해요.
첫 번째 질문에 답하려면 설명한 맥락에서 CSRF 보호가 필요하지 않습니다.CSRF 보호의 배경은 사용자가 원치 않는 작업을 수행하도록 속지 않도록 하기 위한 것입니다.
예를 들어, 순수 이론에서, 당신은 은행의 웹사이트에 로그인하고 (따라서 세션을 설정) 그 다음에 수상한 웹사이트로 갈 수 있었습니다.이 사이트는 은행의 API에 POST 요청을 하는 양식을 가지고 있을 수 있습니다.세션이 있기 때문에 엔드포인트가 CSRF로 보호되지 않으면 요청이 통과될 수 있습니다.
이와 같이 CSRF는 대부분 브라우저 + 세션 기반 공격에 대한 보호 역할을 합니다.예를 들어 순수 REST API를 노출하는 경우.저작권 보호, 그렇다면 CSRF에 대한 어떠한 이유도 보이지 않습니다.
부트를 할 때는 설정할 .application.properties
/application.yaml
구성 파일.
security.enable-csrf=false
일반 응용 프로그램 속성 문서 페이지에서 자세한 구성 옵션을 확인할 수 있습니다.
csrf를 더 적절한 방법으로 비활성화하고 싶다면 이렇게 부를 수 있습니다(java 구성을 사용하는 경우).
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().fullyAuthenticated()
.and().httpBasic();
.and()
.csrf()
.disable()
언급URL : https://stackoverflow.com/questions/48985293/spring-security-stateless-rest-service-and-csrf
'programing' 카테고리의 다른 글
SQL Server 사용 권한 스크립팅 (0) | 2023.06.21 |
---|---|
MySql로 개발된 함수 생성 구문에서 오류가 발생하여 PphMyAdmin SQL 콘솔의 MariaDB에서 작동하지 않음 (0) | 2023.06.21 |
함수의 출력 억제 (0) | 2023.06.21 |
__del__ 메서드는 무엇이며 어떻게 부르나요? (0) | 2023.06.21 |
Git에 의해 마스터에서 커밋되지 않은 변경 사항을 새 분기에 넣는 중 (0) | 2023.06.21 |