CSP: script-src
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itโs been available across browsers since โจ2016ๅนด8ๆโฉ.
* Some parts of this feature may have varying levels of support.
HTTP ใฎ Content-Security-Policy
(CSP) ใซใใใ script-src
ใใฃใฌใฏใใฃใใฏใ JavaScript ใฎๆ
ๅ ฑใชใฝใผในใๆๅฎใใพใใใใใฏ <script>
่ฆ็ด ใฎไธญใซ็ดๆฅ่ชญใฟ่พผใพใใ URL ใ ใใงใชใใใคใณใฉใคใณใฎในใฏใชใใใคใใณใใใณใใฉใผ (onclick
) ใในใฏใชใใๅฎ่กใฎใใชใฌใผใจใชใใใ XSLT ในใฟใคใซใทใผใใฎใใใชใใฎใๅซใพใใพใใ
CSP ใใผใธใงใณ | 1 |
---|---|
ใใฃใฌใฏใใฃใ็จฎๅฅ | ใใงใใใใฃใฌใฏใใฃใ |
default-src ใซใใไปฃๆฟ |
ใใใใใฎใใฃใฌใฏใใฃใใใชใๅ ดๅใใฆใผใถใผใจใผใธใงใณใใฏ default-src ใใฃใฌใฏใใฃใใๆขใใพใใ
|
ๆงๆ
Content-Security-Policy: script-src 'none';
Content-Security-Policy: script-src <source-expression-list>;
ใใฎใใฃใฌใฏใใฃใใฏใๆฌกใฎใใใใใฎๅคใๆๅฎใใใใจใใงใใพใใ
'none'
-
ใใฎ็จฎ้กใฎใชใฝใผในใฏ่ชญใฟ่พผใพใใพใใใๅไธๅผ็จ็ฌฆใฏๅฟ ้ ใงใใ
<source-expression-list>
-
ใฝใผใน่กจ็พใฎๅคใ็ฉบ็ฝใงๅบๅใฃใใชในใใงใใใใฎ็จฎ้กใฎใชใฝใผในใฏใๆๅฎใใใใฝใผใน่กจ็พใฎใใใใใจไธ่ดใใๅ ดๅใซ่ชญใฟ่พผใพใใพใใใใฎใใฃใฌใฏใใฃใใงใฏใใใงใใใใฃใฌใฏใใฃใใฎๆงๆใซๆฒ่ผใใใฆใใใฝใผใน่กจ็พใฎใใใใใ้ฉ็จใงใใพใใ
ไพ
ไฟก้ ผใใใใใกใคใณใใใฎใชใฝใผในใ่จฑๅฏใชในใใซ่ฟฝๅ
ใใฎ CSP ใใใใผใใใๅ ดๅใ https://example.com
ใใใฎในใฏใชใใใฎใฟใ่จฑๅฏใใพใใ
Content-Security-Policy: script-src https://example.com/
ไปฅไธใฎในใฏใชใใใฏใใญใใฏใใใ่ชญใฟ่พผใฟใๅฎ่กใ่กใใใพใใใ
<script src="https://not-example.com/js/library.js"></script>
ใชใใใคใณใฉใคใณใฎใคใใณใใใณใใฉใผใๅๆงใซใใญใใฏใใใพใใ
<button id="btn" onclick="doSomething()"></button>
ใใใ addEventListener
ใฎๅผใณๅบใใซ็ฝฎใๆใใฆใใ ใใใ
document.getElementById("btn").addEventListener("click", doSomething);
ใคใณใฉใคใณใคใใณใใใณใใฉใผใ็ฝฎใๆใใใใจใใงใใชใๅ ดๅใ 'unsafe-hashes'
ใฝใผในๅผใไฝฟ็จใใฆใคใใณใใใณใใฉใผใไฝฟ็จใใใใจใใงใใพใใ
่ฉณใใๆ
ๅ ฑใฏๅฎๅ
จใงใฏใชใใใใทใฅใๅ็
งใใฆใใ ใใใ
ใใใทใฅใไฝฟ็จใใฆๅค้จในใฏใชใใใ่จฑๅฏใชในใใซ่ฟฝๅ
ไธ่จใง็คบใใใใใซใไฟก้ ผใใใใใกใคใณใ่จฑๅฏใใใใจใฏใใณใผใใๅฎๅ จใซ่ชญใฟ่พผใพใใๅ ดๆใๆๅฎใใใใใฎๅคงใพใใชๆๆณใงใใ ใใใฏใ็นใซใตใคใใๅคใใฎใชใฝใผในใไฝฟ็จใใฆใใใไฟก้ ผใใใใตใคใใไพตๅฎณใใใใใจใฏใชใใจ็ขบไฟกใใฆใใๅ ดๅใฎ็พๅฎ็ใชๆๆณใงใใ
ไปฃๆฟใฎๆนๆณใจใใฆใใใกใคใซใใใทใฅใไฝฟ็จใใฆ่จฑๅฏใใในใฏใชใใใๆๅฎใใๆนๆณใใใใพใใ
ใใฎๆๆณใไฝฟ็จใใใจใ<script>
่ฆ็ด ๅ
ใฎๅค้จใใกใคใซใฏใ integrity
ๅฑๆงใฎๆๅนใชใใใทใฅๅคใใในใฆ CSP ใใใใผใง่จฑๅฏใใใๅคใจไธ่ดใใๅ ดๅใซใฎใฟใ่ชญใฟ่พผใพใๅฎ่กใใใพใใ
ใตใใชใฝใผในๅฎๅ
จๆงใฎๆฉ่ฝใฏใใใฆใณใญใผใใใใใกใคใซใ็คบใใใใทใฅๅคใๆใกใๅคๆดใใใฆใใชใใใจใ่ฟฝๅ ็ใซ่ชฟในใพใใ
ใใใฏใใกใคใณใไฟก้ ผใใใใใๅฎๅ
จใงใใใใกใคใซใฏใใใจใไพตๅฎณใใใใตใคใใใ่ชญใฟ่พผใพใใใจใใฆใใๆนๅคใใใฆใใชใๅ ดๅใซใฎใฟไฝฟ็จใใใใใใงใใ
ใใใใใใใฏใใ็ฒๅบฆใฎ็ดฐใใใใฎใงใใใ้ข้ฃไปใใใใในใฏใชใใใๅคๆดใใใใใณใซใ CSP ใจในใฏใชใใ่ฆ็ด ใงใใใทใฅๅคใๆดๆฐใใใใจใ่ฆๆฑใใใพใใ
ไธ่จใฎ CSP ใใใใผใฏใใใฎๆๆณใ็คบใใฆใใพใใ
SHA384 ใใใทใฅใ oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC
ใงใใใใใพใใฏ SHA256 ใใใทใฅใ fictional_value
ใงใใในใฏใชใใใ่จฑๅฏใใพใใ
Content-Security-Policy: script-src 'sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC' 'sha256-fictional_value'
ไธ่จใฎ example-framework.js
ในใฏใชใใใฏ่ชญใฟ่พผใพใใใฏใใงใใใชใใชใใใใฎ integrity
ๅฑๆงใฎใใใทใฅๅคใ CSP ๅ
ใซใๅญๅจใใใใใงใ๏ผใใฆใณใญใผใใใใใกใคใซใซๅฎ้ใซใใฎใใใทใฅใๅญๅจใใใใจใๆๅฎใใๅ ดๅใฏ๏ผใ
<script
src="https://example.com/example-framework.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous"></script>
integrity
ๅฑๆงใฏ่คๆฐใฎๅคใๆใคใใจใใงใใใใใใ็ฐใชใใขใซใดใชใบใ ใไฝฟ็จใใฆ่จ็ฎใใใใใกใคใซใฎใใใทใฅใๆๅฎใใใใจใใงใใพใใ
ๅค้จในใฏใชใใใ่ชญใฟ่พผใพใใใใใซใฏใ CSP ใงใฏใๅฑๆงๅ
ใฎใในใฆใฎๆๅนใชใใใทใฅๅคใ CSP ใฎ script-src
ๅฎฃ่จใซใๆๅฎใใใฆใใใใจใ่ฆๆฑใใใพใใ
ใใใใฃใฆใไธ่จใฎในใฏใชใใใฏ่ชญใฟ่พผใพใใพใใใใชใใชใใ 2 ใค็ฎใฎใใใทใฅใฏไธ่จ CSP ใใใใผใซใฏๅญๅจใใชใใใใงใใ
<script
src="https://example.com/example-framework.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC sha256-not-in-csp"
crossorigin="anonymous"></script>
ใใฎใซใผใซใฏใๆๅนใชใใใทใฅๅคใฎใฟใซ้ฉ็จใใใพใใ ใใฉใฆใถใผใใใใทใฅใจใใฆ่ช่ญใใชใๅคใฏ็ก่ฆใใใใใใๆฌกใฎในใฏใชใใใฏ่ชญใฟ่พผใพใใใฏใใงใใ
<script
src="https://example.com/example-framework.js"
integrity="invalid-or-unsupported-hash sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous"></script>
ใตใใชใฝใผในๅฎๅ
จๆงใซใฏใใใใทใฅใฎ่จ็ฎใจ integrity
ๅฑๆงใฎไฝฟ็จใซ้ขใใใใๅคใใฎๆ
ๅ ฑใๅซใพใใฆใใพใใ
ๅฎๅ จใงใฏใชใใคใณใฉใคใณในใฏใชใใ
ใกใข: ใคใณใฉใคใณในใฟใคใซใจใคใณใฉใคใณในใฏใชใใใ็ฆๆญขใใใใจใฏใCSP ใๆไพใใใปใญใฅใชใใฃไธใฎๆๅคงใฎๅฉ็นใฎไธใคใงใใ ใฉใใใฆใไฝฟ็จใใชใใใฐใชใใชใๅ ดๅใฏใใใใใ่จฑๅฏใใไป็ตใฟใใใใคใใใใพใใ ใใใทใฅใฏใคใณใฉใคใณใฎในใฏใชใใใในใฟใคใซใซ้ฉ็จใใใพใใใใคใใณใใใณใใฉใผใซใฏ้ฉ็จใใใพใใใ ่ฉณใใๆ ๅ ฑใฏๅฎๅ จใงใฏใชใใใใทใฅใๅ็ งใใฆใใ ใใใ
ใคใณใฉใคใณใฎในใฏใชใใใในใฟใคใซใ่จฑๅฏใใใใใซ 'unsafe-inline'
ใใใคใณใฉใคใณใใญใใฏใซไธ่ดใใใใณในใฝใผในใพใใฏใใใทใฅใฝใผในใๆๅฎใใใใจใใงใใพใใ
ไปฅไธใฎใณใณใใณใใปใญใฅใชใใฃใใชใทใผใงใฏใใคใณใฉใคใณใฎ <script>
่ฆ็ด ใฏใในใฆ่จฑๅฏใใใพใใ
Content-Security-Policy: script-src 'unsafe-inline';
ไปฅไธใฎ <script>
่ฆ็ด ใฏใใใชใทใผใซใใฃใฆ่จฑๅฏใใใพใใ
<script>
const inline = 1;
// โฆ
</script>
ใในใฆใฎใคใณใฉใคใณในใฏใชใใใ่จฑๅฏใใใใจใฏใใปใญใฅใชใใฃไธใฎใชในใฏใใใใจ่ใใใใใฎใงใไปฃใใใซ nonce-source ใพใใฏ hash-source ใไฝฟ็จใใใใจใๆจๅฅจใใใพใใ nonce-source ใไฝฟ็จใใฆใคใณใฉใคใณในใฏใชใใใจในใฟใคใซ่จญๅฎใ่จฑๅฏใใใซใฏใ๏ผๆๅท็ใซๅฎๅ จใชใฉใณใใ ใใผใฏใณ็ๆๅจใไฝฟ็จใใฆ๏ผใฉใณใใ ใชใใณในๅคใ็ๆใใใใชใทใผใซ่จ่ผใใๅฟ ่ฆใใใใพใใ ใใใซใฏใกใขใๅฟ ่ฆใงใใใใใฎใใณในๅคใฏ HTTP ใชใฏใจในใใใจใซไธๆใงใใๅฟ ่ฆใใใใใใๅ็ใซ็ๆใใๅฟ ่ฆใใใใพใใ
Content-Security-Policy: script-src 'nonce-2726c7f26c'
ๅใใใณในใ <script>
่ฆ็ด ใซๆๅฎใใๅฟ
่ฆใใใใพใใ
<script nonce="2726c7f26c">
const inline = 1;
// โฆ
</script>
ไปใซใใใคใณใฉใคใณในใฏใชใใใใใใใทใฅใ็ๆใใใใจใใงใใพใใ CSP ใงใฏ sha256, sha384, sha512 ใซๅฏพๅฟใใฆใใพใใ
Content-Security-Policy: script-src 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8='
ใใใทใฅใ็ๆใใใจใใ <script>
ใฟใฐใๅซใใชใใใใซใใๅคงๆๅญๅฐๆๅญใจใใใฏใคใในใใผในใ็นใซๅๅพใฎใใฏใคใในใใผในใซๆณจๆใใฆใใ ใใใ
<script>
const inline = 1;
</script>
ๅฎๅ จใงใฏใชใใใใทใฅ
script-src 'sha256-{HASHED_INLINE_SCRIPT}'
ใฎใใใชใใใทใฅใๆใคใคใณใฉใคใณใชใฝใผในใซๅฏพใใใใชใทใผใฏใใใฎใใใทใฅใซใใฃใฆในใฏใชใใใจในใฟใคใซใ่จฑๅฏใใพใใใใคใใณใใใณใใฉใผใฏ่จฑๅฏใใพใใใ
<!-- Allowed by CSP: script-src 'sha256-{HASHED_INLINE_SCRIPT}' -->
<script>
const inline = 1;
</script>
<!-- CSP: script-src 'sha256-{HASHED_EVENT_HANDLER}'
will not allow this event handler -->
<button onclick="myScript()">Submit</button>
'unsafe-inline'
ใ่จฑๅฏใใไปฃใใใซใใณใผใใๅ็ญใฎ addEventListener
ๅผใณๅบใใซๆดๆฐใงใใชใๅ ดๅใฏ 'unsafe-hashes'
ใฝใผใน่กจ็พใไฝฟ็จใใใใจใใงใใพใใ
ไปฅไธใฎใคใณใฉใคใณใคใใณใใใณใใฉใผใ่จ่ผใใ HTML ใใผใธใๆๅฎใใใใจใใพใใ
<!-- I want to use addEventListener, but I can't :( -->
<button onclick="myScript()">Submit</button>
ไปฅไธใฎ CSP ใใใใผใในใฏใชใใใฎๅฎ่กใ่จฑๅฏใใพใใ
Content-Security-Policy: script-src 'unsafe-hashes' 'sha256-{HASHED_EVENT_HANDLER}'
ๅฎๅ จใงใฏใชใ eval ๅผ
'unsafe-eval'
ใฝใผในๅผใฏใๆๅญๅใใใณใผใใ็ๆใใใใใคใใฎในใฏใชใใๅฎ่กใกใฝใใใๅถๅพกใใพใใ
ใใใใผใธใซ CSP ใใใใผใใใใ 'unsafe-eval'
ใ script-src
ใใฃใฌใฏใใฃใใงๆๅฎใใใฆใใชใใฃใๅ ดๅใไปฅไธใฎใกใฝใใใฏใใญใใฏใใใฆไฝใฎๅนๆใ็พใใพใใใ
eval()
Function()
-
ใกใฝใใใฎๆๅญๅใชใใฉใซใ
setTimeout("alert(\"Hello World!\");", 500);
ใฎใใใซๆธกใใๅ ดๅ -
window.execScript()
้ๆจๆบ (IE < 11 ใฎใฟ)
ๅฎๅ จใงใฏใชใ WebAssembly ใฎๅฎ่ก
'wasm-unsafe-eval'
ใฝใผในๅผใฏ WebAssembly ใฎๅฎ่กใๅถๅพกใใพใใ
ใใผใธใ CSP ใใใใผใไฟๆใใscript-src
ใใฃใฌใฏใใฃใใง 'wasm-unsafe-eval'
ใๆๅฎใใใฆใใชใๅ ดๅใWebAssembly ใฏใใฎใใผใธใงใฎ่ชญใฟ่พผใฟใจๅฎ่กใใใญใใฏใใใพใใ
'wasm-unsafe-eval'
ใฝใผใน่กจ็พใฏ 'unsafe-eval'
ใใใ่ฉณ็ดฐใงใWebAssembly ใฎใณใณใใคใฉใผ๏ผใจใคใณในใฟใณในๅ๏ผใจใไพใใฐ JavaScript ใง eval
ๅฆ็ใไฝฟ็จใใใใจใฎไธกๆนใ่จฑๅฏใใฆใใพใใ
'unsafe-eval'
ใฝใผในใญใผใฏใผใใไฝฟ็จใใใๅ ดๅใCSP ใใชใทใผใฎ 'wasm-unsafe-eval'
ใไฝฟ็จใใใใจใใใฎใญใผใฏใผใใไธๆธใใใใพใใ
Content-Security-Policy: script-src 'wasm-unsafe-eval'
strict-dynamic
'strict-dynamic'
ใฝใผในๅผใฏใใใผใฏใขใใไธญใฎในใฏใชใใใซๆ็คบ็ใซไธใใใใไฟก้ ผใใใใณในใใใใทใฅใไผดใฃใฆใใใฎใซใผใในใฏใชใใใซใใฃใฆ่ชญใฟ่พผใพใใใในใฆใฎในใฏใชใใใซไผๆฌใใใใใจใๆๅฎใใพใใๅๆใซใ 'self'
ใ 'unsafe-inline'
ใฎใใใชใใฏใคใใชในใใใฝใผใน่กจ็พใฏ็ก่ฆใใใพใใ
ไพใใฐใ script-src 'strict-dynamic' 'nonce-R4nd0m' https://allowlisted.com/
ใฎใใใชใใชใทใผใงใฏใ <script nonce="R4nd0m" src="https://example.com/loader.js">
ใๆๅฎใใใซใผใในใฏใชใใใฎ่ชญใฟ่พผใฟใ่จฑๅฏใใ loader.js
ใง่ชญใฟ่พผใพใใใในใฆใฎในใฏใชใใใซใใฎไฟก้ ผๆงใไผๆญใใใพใใใ https://allowlisted.com/
ใใใฎในใฏใชใใใฎ่ชญใฟ่พผใฟใฏใใใณในใไผดใฃใฆใใใใไฟก้ ผใใใในใฏใชใใใใ่ชญใฟ่พผใพใใใใฎใงใชใ้ใใ่จฑๅฏใใพใใใ
Content-Security-Policy: script-src 'strict-dynamic' 'nonce-someNonce'
ใพใใฏ
Content-Security-Policy: script-src 'strict-dynamic' 'sha256-base64EncodedHash'
ใฆใผใถใผใจใผใธใงใณใใฎในใใใใฃใณใฐใๅฟ
่ฆใจใใใๅพๆนไบๆๆงใฎใใๆนๆณใจใใฆใ strict-dynamic
ใๆๅฎใใใใจใใงใใพใใ
ไปฅไธใฎใใชใทใผใ
Content-Security-Policy: script-src 'unsafe-inline' https: 'nonce-abcdefg' 'strict-dynamic'
ใฏใ CSP1 ใซๅฏพๅฟใใใใฉใฆใถใผใงใฏ 'unsafe-inline' https:
ใฎใใใซๅไฝใใ CSP2 ใซๅฏพๅฟใใใใฉใฆใถใผใงใฏ https: 'nonce-abcdefg'
ใฎใใใซใCSP3 ใซๅฏพๅฟใใใใฉใฆใถใผใงใฏ 'nonce-abcdefg' 'strict-dynamic'
ใฎใใใซๅไฝใใพใใ
ๆๆฉใซใผใซใ่จฑๅฏ
script ่ฆ็ด ใซๆๆฉใซใผใซใๅ
ฅใใๅ ดๅใฏ๏ผ<script type="speculationrules">
ใๅ็
ง๏ผใ script-src
ใใฃใฌใฏใใฃใใ 'inline-speculation-rules'
ใฝใผในใใใใทใฅใฝใผในใใใณในใฝใผในใฎใใใใใจๅ
ฑใซไฝฟ็จใใๅฟ
่ฆใใใใพใใไพใ็คบใใพใใ
Content-Security-Policy: script-src 'inline-speculation-rules'
ไปๆงๆธ
Specification |
---|
Content Security Policy Level 3 # directive-script-src |
ใใฉใฆใถใผใฎไบๆๆง
Loadingโฆ