Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Spatie/Laravel-CSP 패키지는 인라인 스크립트 및 스타일의 동적 비 사용을 어떻게 처리합니까?


Spatie/Laravel-CSP 패키지는 인라인 스크립트 및 스타일의 동적 비 사용을 어떻게 처리합니까?


Spatie/Laravel-CSP 패키지는 HTTP 요청 당 고유 한 NonCE 값을 생성하고 컨텐츠 보안 정책 (CSP) 헤더 및 관련 HTML 요소에 자동으로 주입하여 인라인 스크립트 및 스타일에 대한 동적 비 사용을 처리합니다. 다음은 작동 방식에 대한 자세한 설명입니다.

nonce 세대

- 패키지는 NonCeGenerator 인터페이스를 사용하여 각 요청마다 동적으로 Nonce 문자열을 생성합니다.
- 기본적으로 고유 한 임의 문자열을 반환하는 고유 한 Nonce Generator 클래스를 구현할 수 있습니다. 예를 들어,`vite :: cspnonce ()`를 사용하여 자산 편집 중에 Vite에 의해 생성 된 NOCE를 얻기 위해`varavelvitenoncegenerator`와 같은 클래스를 만들어 Laravel Vite의 NonCE 시스템과 통합 할 수 있습니다.
- 패키지의`csp.php` configuration 파일의 'nonce_generator'키에 nonce 생성기 클래스를 지정합니다.

정책에 Nonce를 적용합니다

-CSP 정책 클래스 (일반적으로`spatie \ csp \ policies \ basic`)에서`addnoncefordirective (directive :: script)`및`addnoncefordirective (directive :: style)와 같은 메소드를 사용하여`script-src` 및`style style에 추가되어야 함을 나타냅니다.
- 생성 된 NONCE가 이러한 지시문의 CSP 헤더에 포함되어 있는지 확인하여 일치하는 Nonce 속성을 실행할 수있는 인라인 스크립트 및 스타일이 가능합니다.

미들웨어 및 헤더 주입

- 패키지는 HTTP 커널 또는 특정 경로에 등록하는 미들웨어 (`spatie \ csp \ addcspheaders`)를 제공합니다.
-이 미들웨어는 요청에 대한 NOCE를 생성하고 NONCE 지시문을 포함한 CSP 정책을 적용하며 HTTP 응답에 적절한 CSP 헤더를 추가합니다.
- Nonce 값은 요청 내에서 일관되므로`@nonce`와 같은 블레이드 지시문 또는`csp_nonce ()`와 같은 헬퍼 함수와 같은 블레이드 지시문을 사용하여 뷰에서 inline``또는``태그에서 Nonce 속성을 출력합니다.

laravel vite와의 통합

-Laravel Vite를 사용할 때 패키지는`vite :: cspnonce ()`을 통해 Vite의 내장 Nonce 생성을 활용할 수 있습니다.
-Vite에서 Nonce를 반환하는 사용자 정의 Nonce Generator 클래스를 생성하여 CSP 헤더에 사용 된 NonCE가 Vite-injected 스크립트 및 스타일에 적용되는 NonCE와 일치하는지 확인할 수 있습니다.
- 이것은 Nonce 불일치로 인한 CSP 위반을 피하고 Vite 기반 Laravel 앱에서 안전한 인라인 스크립트/스타일을 허용합니다.

추가 기능

- 패키지는 또한 HTTP 헤더를 제어 할 수없는 경우 CSP 정책을 메타 태그 (`@cspmetatag` 블레이드 지침을 통해)로 지원합니다.
- 자원을 차단하지 않고 CSP 정책을 테스트하기위한 보고서 전용 모드를 지원합니다.
- 다양한 환경 (개발 대 생산)에 대한 정책을 사용자 정의 할 수 있습니다.

실제 메모

-Blade`@nonce` 지시 또는`csp_nonce ()`도우미를 사용하여 Nonce가 인라인 스크립트/스타일에서 출력을 확인해야합니다. 그렇지 않으면 브라우저가 차단됩니다.
- Chrome과 같은 브라우저는 동적으로 주입 된 스크립트 태그에서 Nonce 속성을 제거 할 수 있으므로 Nonce를 신중하게 사용하고 거동을 테스트하십시오.
-Nonce는 요청 당 무작위 문자열로, 올바른 NonCE가있는 사람 만 실행할 수 있도록함으로써 인라인 스크립트/스타일을 더 안전하게 만듭니다.

요약하면, Spatie/Laravel-CSP는 구성 가능한 NonCE 생성기를 통해 요청 당 NONCE를 동적으로 생성하고 스크립트 및 스타일의 CSP 헤더 에이 NonCE를 포함하고 인라인 요소에 NonCE 속성을 출력 할 수있는 블레이드 지침 및 도우미를 제공합니다. 이 통합, 특히 Laravel Vite와의 통합은 CSP가 안전하지 않은 내선을 사용하지 않고 인라인 스크립트와 스타일을 안전하게 허용하여 기능을 유지하면서 응용 프로그램 보안을 향상시킵니다 [1] [2] [3] [6].

인용 :
[1] https://github.com/spatie/laravel-csp
[2] https://laravel.io/forum/laravel-mix-and-content-security-policy
[3] https://laravel-news.com/package/spatie-laravel-csp
[4] https://stackoverflow.com/questions/75106343/nonce-is-always-when-using-laravel-csp-with-laravel-and-vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-add-csp-nonce-inline-style-script-injected-by-in-a-laravel- 및
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-is-n-how-to-enable-it/
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-laravel-ficial-packages
[9] https://developer.mozilla.org/en-us/web/http/headers/content-security-policy/script-src