<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta
      name="description"
      content="Build a Content Security Policy (CSP) header with an accessible form-based tool."
    />
    <title>CSP Builder</title>
    <link rel="icon" href="/favicon.ico" sizes="any" />
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32" />
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16" />
    <link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180" />
    <link rel="manifest" href="/site.webmanifest" />
    <script type="module" crossorigin src="/assets/main-DPYrGNE1.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/main-CRN9EKmT.css">
  </head>
  <body>
    <div id="app" class="app">
      <header class="app-header"><h1>CSP Builder</h1><p class="app-subtitle">Build a Content Security Policy header by enabling directives and adding source values. Copy the result for your server configuration.</p></header><div class="app-layout"><noscript><section class="url-importer" aria-label="JavaScript required"><h2>JavaScript required</h2><p class="url-importer-description">This tool needs JavaScript enabled to generate policy output, compute scores, and provide copy helpers.</p></section></noscript><section id="url-importer-root" class="url-importer"></section><form class="directive-form" novalidate><fieldset class="category-fieldset"><legend>Fetch directives</legend><div class="directive-list"><article class="directive-section" id="directive-section-default-src" data-directive="default-src"></article><article class="directive-section" id="directive-section-script-src" data-directive="script-src"></article><article class="directive-section" id="directive-section-script-src-elem" data-directive="script-src-elem"></article><article class="directive-section" id="directive-section-script-src-attr" data-directive="script-src-attr"></article><article class="directive-section" id="directive-section-style-src" data-directive="style-src"></article><article class="directive-section" id="directive-section-style-src-elem" data-directive="style-src-elem"></article><article class="directive-section" id="directive-section-style-src-attr" data-directive="style-src-attr"></article><article class="directive-section" id="directive-section-img-src" data-directive="img-src"></article><article class="directive-section" id="directive-section-font-src" data-directive="font-src"></article><article class="directive-section" id="directive-section-connect-src" data-directive="connect-src"></article><article class="directive-section" id="directive-section-media-src" data-directive="media-src"></article><article class="directive-section" id="directive-section-object-src" data-directive="object-src"></article><article class="directive-section" id="directive-section-frame-src" data-directive="frame-src"></article><article class="directive-section" id="directive-section-child-src" data-directive="child-src"></article><article class="directive-section" id="directive-section-worker-src" data-directive="worker-src"></article><article class="directive-section" id="directive-section-manifest-src" data-directive="manifest-src"></article><article class="directive-section" id="directive-section-prefetch-src" data-directive="prefetch-src"></article><article class="directive-section" id="directive-section-fenced-frame-src" data-directive="fenced-frame-src"></article></div></fieldset><fieldset class="category-fieldset"><legend>Document directives</legend><div class="directive-list"><article class="directive-section" id="directive-section-base-uri" data-directive="base-uri"></article><article class="directive-section" id="directive-section-sandbox" data-directive="sandbox"></article></div></fieldset><fieldset class="category-fieldset"><legend>Navigation directives</legend><div class="directive-list"><article class="directive-section" id="directive-section-form-action" data-directive="form-action"></article><article class="directive-section" id="directive-section-frame-ancestors" data-directive="frame-ancestors"></article></div></fieldset><fieldset class="category-fieldset"><legend>Reporting directives</legend><div class="directive-list"><article class="directive-section" id="directive-section-report-uri" data-directive="report-uri"></article><article class="directive-section" id="directive-section-report-to" data-directive="report-to"></article></div></fieldset><fieldset class="category-fieldset"><legend>Other directives</legend><div class="directive-list"><article class="directive-section" id="directive-section-trusted-types" data-directive="trusted-types"></article><article class="directive-section" id="directive-section-require-trusted-types-for" data-directive="require-trusted-types-for"></article><article class="directive-section" id="directive-section-upgrade-insecure-requests" data-directive="upgrade-insecure-requests"></article></div></fieldset></form><aside id="generated-policy" class="policy-output" aria-label="Generated policy"></aside></div>
    </div>
    <footer class="site-footer">
  <p class="site-footer-text">
    © 2009 - <span class="site-footer-year"></span> <a href="https://nooshu.com" target="_blank" rel="noopener noreferrer" title="Opens in a new tab" aria-label="Matt Hobbs (opens in new tab)">Matt Hobbs</a>. All Rights Reserved. Built with <a href="https://www.cloudflare.com" target="_blank" rel="noopener noreferrer" title="Opens in a new tab" aria-label="Cloudflare (opens in new tab)">Cloudflare</a>, ❤️, and <a href="https://cursor.com/referral?code=XDKDHWAJX4RJ" target="_blank" rel="noopener noreferrer" title="Opens in a new tab" aria-label="Cursor referral (opens in new tab)">🤖</a>.
  </p>
</footer>
<script type="module" src="/site-footer-year.mjs"></script>
  </body>
</html>
