Источники политики безопасности контента connect-src «unsafe-inline» и «unsafe-eval»
Я пытаюсь разобраться, в какой ситуации в директиве понадобятся источники «unsafe-inline» и «unsafe-eval». Они перечислены здесь как источники:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src .
Мне кажется ясным, зачем нужны эти источники на
script-src
, я просто не могу собрать воедино, зачем они нужны, и я предполагаю, что у MDN должна быть причина, чтобы перечислить их в качестве источников в этой директиве.
Может ли кто-нибудь помочь мне понять или дать мне пример использования? Возьмем пример ниже. Обратите внимание, что я успешно делаю запрос GET к mocky.io из встроенного скрипта, а затем вызываю eval() с обратным вызовом БЕЗ источника «unsafe-inline» или «unsafe-eval» для
connect-src
директива.
<html lang="en">
<head>
<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-inline' 'unsafe-eval'; connect-src https://run.mocky.io;">
</head>
<body>
<h1>Testing CSP</h1>
<!-- testing any JS executing from unsafe inline -->
<script type="text/javascript">
console.log("Testing some unsafe inline");
</script>
<!-- testing XHR calls from unsafe inline -->
<script type="text/javascript">
const callMocky = () => {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
//eval from the XHR state change
eval("console.log('XHR Sent and Received!')")
console.log(xhttp.responseText);
}
};
xhttp.open("GET", "https://run.mocky.io/v3/7ef12b35-8438-424f-8a5f-b11521d03fe7", true);
xhttp.send();
}
callMocky()
</script>
<!-- testing unsafe eval from unsafe inline -->
<script type="text/javascript">
eval('console.log("this is an unsafe eval!")')
</script>
</body>
</html>