Rails 7 및 CSP - 인라인 태그에 nonce를 추가하는 방법(필요한 경우)

1992 단어 cspcssrailsrails7
새 Rails 7 애플리케이션에서 작동하는 콘텐츠 보안 정책을 가져오려고 했지만 CSP가 활성화될 때 문제를 일으키는 문서<style><head> 요소가 있습니다.

내 CSP에 unsafe_inline을 추가하고 싶지 않으므로 유일한 다른 옵션은 nonce를 사용하는 것입니다!

안타깝게도 로그인한 사용자의 기본 설정을 기반으로 일부 CSS 변수를 사용자 지정하는 데 사용되기 때문에 "인라인"스타일이 필요하고 일부 ERB가 포함된 인라인 스타일 요소가 이를 달성하는 가장 빠른 방법처럼 보였습니다.

궁극적으로 작동시키는 방법은 다음과 같습니다.

content_tag(:style, nonce: content_security_policy_nonce) do
  ':root { --css-var: value; }'
end


가져오기 부분은 content_security_policy_nonce 메서드(단지 request.content_security_policy_nonce 호출)가 다음 두 가지 요구 사항이 충족된 후 ERB에서 nonce를 렌더링합니다.
  • 레이아웃에 <%= csp_meta_tag %>가 있습니다
  • .
  • 콘텐츠 보안 정책 구성에 다음과 같은 항목이 있습니다.

  • config.content_security_policy_nonce_generator = ->(request) { SecureRandom.base64(16) }
    config.content_security_policy_nonce_directives = %w(script-src style-src)
    


    nonce 구성에 대한 자세한 내용은 https://edgeguides.rubyonrails.org/security.html#adding-a-nonce을 참조하십시오.

    가장 중요한 것은 nonce 지시문에 style-src를 추가하는 것입니다. 기본적으로 새 Rails 프로젝트에는 script-src만 포함됩니다.

    Rails는 <script> 태그를 사용하여 이 작업을 수행하는 쉬운 방법을 제공하지만 <style> 태그는 사용하지 않습니다.

    <%= javascript_tag nonce: true do -%>
      alert('Hello, World!');
    <% end -%>
    


    이와 같은 인라인 스타일을 사용하는 것이 좋지 않다는 것을 알고 있지만 레거시 앱에 CSP를 추가하거나 스타일을 인라인/헤드에 포함해야 할 때 정말 유용할 수 있습니다.

    좋은 웹페이지 즐겨찾기