Witam!
Proszę Was o pomoc.
Posiadam stronę z darmowymi ogłoszeniami motoryzacyjnymi https://tuauta.pl/ogloszenia/opel,5190. Na jednej podstronie (blogu) muszę zablokować wykonywanie JavaScrypt. Jak mogę to zrobić?
Wersja PHP 8.0.27
Pozdrawiam!
Tomasz
Wyślij nagłówek CSP
Content-Security-Policy: script-src 'none'
Teraz żaden skrypt się nie odpali i zakończy działanie błędem w konsoli.
Ewentualnie możesz ustalić wartość nonce
lub zezwolić konkretnym skryptom działanie prez podanie ich źródła lub hashu zawartości.
Jest wiele opcji - poczytaj tu https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src
A czemu chcesz to zrobić?
Brzmi jakbyś chciał przyjmować treści postów od użytkowników i wyświetlać je na stronie.
W takiej sytuacji (jak i innych, podobnych) powinieneś przede wszystkim nie dopuścić do istnienia skryptów na stronie (i w bazie postów). Jakiś "HTML sanitization php" w Google może pomóc, ja już PHP nie robię, więc nie skieruję dokładniej. Idealnie posty nie powinny być w ogóle przyjmowane w postaci HTML a np. w Markdown, następnie konwertowane do HTML. Tutaj nie zaszkodzi dodatkowo użyć sanityzacji na wyniku.
To, co zaproponował @obscurity jest super, ale to tylko druga ściana (najlepiej połącz to z raportowaniem: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri (czytaj uważnie te komunikaty na czerwono, żebyś zrobił rozwiązanie które działa teraz i będzie nadal działać w przyszłości)).
A teraz dlaczego zalecam dwa rozwiązania na raz, skoro każde "zadziała":
- libka, której użyjesz do markdown / sanityzacji na pewno miała już buga, że przepuszczała jakieś lewe kody. I na pewno będzie miała. W tej sytuacji ochroni cię CSP, a wspomniane raportowanie pomoże wychwycić moment, w którym coś się przemknęło.
- CSP to tylko nagłówek. Może nie być respektowany przez przeglądarki z jakiegoś durnego powodu (tryb developerski, dodatki typu uMatrix, choć widziałem, że nawet zwykłe ad blockery posługiwały się modyfikacją tego nagłówka), możesz przypadkiem zmienić coś w kodzie, co spowoduje, że nagłówek przestanie być zwracany, możesz dołożyć jakieś (reverse) proxy po drodze kiedy przyjdzie do skalowania serwisu, które zgubi ten nagłówek - i nawet tego nie zauważysz.
Dziękuje bardzo za pomoc