CSP(콘텐츠 보안 정책)를 사용하여 Spring Boot에서 XSS(교차 사이트 스크립팅) 방지

개요

웹 애플리케이션을 사용하는 동안 사용자와 개인 데이터의 보안은 가장 중요합니다. 이 기본 원칙은 웹 개발의 초기 단계부터 인정되었지만 악의적인 사용자는 애플리케이션에서 허점을 찾아 사용자를 악용할 수 있습니다.

많은 "표준" 공격은 잘 알려져 있고 문서화되어 있으며 이에 대한 보호는 어렵지 않습니다. 개발자가 자체 보안 관행을 구현하는 부담을 덜어주기 위해 Spring Boot와 같은 프레임워크는 다양한 보안 조치를 추상화하고 잘 알려진 공격을 방지하기 위해 애플리케이션에 보안 필터를 간단히 적용할 수 있도록 합니다.

이 짧은 가이드에서는 XSS(Cross-Site Scripting)가 무엇인지, 누군가가 자신의 애플리케이션에서 이 공격을 수행할 수 있는 방법, Spring Boot를 사용하여 이를 쉽게 방지할 수 있는 방법을 살펴보겠습니다.

XSS(교차 사이트 스크립팅)란 무엇입니까?

Cross-Site Scripting은 악의적인 행위자가 웹 응용 프로그램에 스크립트를 삽입하는 널리 알려진 악용입니다.

일반적으로 동일 출처 정책은 웹 애플리케이션에 적용되며, 이는 출처가 일치하지 않는 경우 웹 페이지의 스크립트가 출처의 데이터에 액세스하도록 제한합니다. 동일 출처 정책에서 – 페이지의 경우 신뢰할 수 있는 웹사이트 사용자와 인터페이스하는 데이터(예: 쿠키)에 액세스할 수 있지만 동일한 출처의 다른 페이지도 액세스할 수 있습니다. 이러한 형태의 액세스 제어는 당시 웹 애플리케이션의 데이터 무결성을 보호하기에 충분해 보였습니다.

교차 사이트 스크립팅은 동일 출처 정책을 우회합니다., 신뢰할 수 있는 웹사이트의 페이지에 악성 스크립트를 삽입합니다. 스크립트는 신뢰할 수 있는 웹사이트에서 실행되기 때문에 신뢰할 수 있는 스크립트로 실행됩니다. 악성 스크립트와 악성이 아닌 스크립트를 구별할 수 있는 명확한 방법이 없었기 때문에 Cross-Site Scripting으로 임의의 코드 실행이 가능했습니다. 여기에는 성가신 경고 삽입에서 사회 공학 공격, 사용자 정보를 조용히 수집하거나 신뢰할 수 있는 웹 사이트의 일부로 보이는 피싱 페이지로 사용자를 리디렉션하는 것까지 다양합니다.

많은 웹 사이트는 Cross-Site Scripting 공격에 취약하며, 이러한 유형의 공격이 90년대부터 알려졌음에도 불구하고 오늘날에도 여전히 일반적인 공격입니다.

콘텐츠 보안 정책(CSP)을 사용하여 스프링 부트 애플리케이션에서 XSS 방지

Spring Boot는 보안을 중요하게 생각하며 Spring의 Security 모듈은 개발자가 보안과 관련하여 걱정을 최소화할 수 있도록 하는 유연하고 강력한 보안 방식을 구현합니다. 신청.

기본적으로 Spring Boot는 여러 보안 헤더를 구현합니다.

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

X-XSS-Protection은 기본적으로 포함되어 있습니다! 이 보안 헤더는 검색 XSS는 시도하고 차단합니다. 이것은 실패 방지 프로세스가 아니며 브라우저에는 감지기의 구현이 다릅니다. Chrome과 같은 일부 브라우저에는 XSS 감사기를 제거했습니다.. 또한 자동 감지는 다음을 위해 작동합니다. 반사된 XSS 공격, 다른 유형의 공격도 존재합니다.

X-XSS-Protection에 대한 보다 현대적인 대안은 콘텐츠 보안 정책 (CSP), 리소스를 로드할 수 있는, 출처 및 끝점에 대한 정책을 주로 처리합니다. 2022년 현재 CSP는 XSS, 클릭재킹 및 기타 유형의 공격에 대한 최고의 예방 수단입니다. 모든 브라우저가 CSP를 구현하는 것은 아니므로 기본적으로 보안 헤더에 포함되지 않습니다.

참고 : CSP가 있는 경우에도 항상 확인하는 것이 최선의 조치입니다. 어떤 코드 삽입을 방지하기 위해 시스템을 사용하여 처리하는 것이 안전한지 확인하십시오.

Spring Boot에서 – 사용자 정의 웹 보안 조치를 구성하려면 일반적으로 다음을 확장합니다. WebSecurityConfigurerAdapter 클래스를 재정의하고 configure() 방법:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("csp-directives");
    }
}

콘텐츠 보안 정책 지침( ;-분리된 문자열)은 사용 사례와 신뢰하려는 소스에 따라 다릅니다.

Content-Security Policy: directive1; directive2; directive3; ... directiveN;

예를 들어, 웹 응용 프로그램은 다음을 사용하여 스크립트를 로드할 수 있는 신뢰할 수 있는 웹 사이트를 나열할 수 있습니다.

script-src https://trusted.com;

또는 타사 웹사이트 신뢰를 건너뛸 수 있습니다.

script-src self;

마찬가지로 애플리케이션은 플러그인을 신뢰할 수 있습니다.

object-src https://trusted.com

다음을 포함하여 제공할 수 있는 다양한 지시문이 있습니다.

  • default-src – 기본 폴백
  • child-src – 유효한 웹 작업자 소스
  • frame-src – 유효한 소스 s와 s
  • img-src – 이미지에 대한 유효한 소스
  • media-src – 유효한 소스 , 태그
  • script-src – 유효한 스크립트 소스(XSS 방지에 도움)
  • style-src – 유효한 소스 요소
  • base-uri – 에서 액세스할 수 있는 리소스를 제한합니다. 요소
  • frame-ancestors – 다음의 유효한 부모 , , 등의 요소

모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!

예를 들어 다음은 안전한 정책 지침 세트입니다.

script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
report-uri https://csp.example.com;

다음을 Spring Boot 애플리케이션에 추가해 보겠습니다.

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none'; base-uri 'none'; require-trusted-types-for 'script'; report-uri https://csp.example.com;");
    }
}

당신은을 사용할 수 있습니다 CSP 평가자 CSP 지시문이 유효한지 평가하기 위해 안전하며 어떤 지시문이 쉽게 악용될 수 있는지 알려줍니다. 다음은 Google API를 허용하는 CSP 지시문입니다.

default-src 'self';
object-src 'none';
frame-src 'self' data:; 
script-src 'self' 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' https://storage.googleapis.com; 
style-src 'self' 'unsafe-inline'; 
img-src 'self' data:; 
font-src 'self' data:;
base-uri 'self'

결론

이 짧은 가이드에서는 XSS(교차 사이트 스크립팅)가 무엇이며 전체적인 수준에서 어떻게 작동하는지 살펴보았습니다. 그런 다음 Spring Boot로 쉽게 구현할 수 있는 몇 가지 XSS 방지 조치를 탐색하여 애플리케이션을 안전하게 만들고 콘텐츠 보안 정책 (CSP).

마지막으로 CSP 지침을 살펴보고 몇 가지 다른 안전 정책을 살펴보았습니다.

타임 스탬프 :

더보기 스택카부스