После долгих разочаровывающих часов исследований я наконец нашел причину для моего приложения Laravel7 VueJS (в пределах шаблонов блейдов), работающего на nginx, с пустым экраном. Тем не менее, мне не хватает объяснения или правильной конфигурации.
Когда я получал доступ к любому маршруту, он просвечивал около 200 мс, а затем переключался на белый экран без ошибок в конфигурации npm run prod
. Тег body был бы совершенно пустым (в инспекторе он выглядел без комментариев)
[...]
<body>
<!-- -->
</body>
[...]
Достаточно забавно (с сарказмом) при перезагрузке страницы страница входа работала бы нормально, но после доступа к любому другому маршруту она вернулась бы к поведению как описано выше.
После переключения на npm run dev
консоль выдавала следующую ошибку:
[Vue warn]: похоже, вы используете автономную сборку Vue . js в среде с политикой безопасности контента, которая запрещает unsafe-eval. Компилятор шаблонов не может работать в этой среде. Рассмотрите возможность смягчения политики, чтобы позволить unsafe-eval или предварительно скомпилировать ваши шаблоны в функции рендеринга.
и
EvalError: Отказался оценивать строку как JavaScript, поскольку «unsafe-eval» не является допустимым источником сценария в следующей директиве Content Security Policy: "default-src 'self' http: https: data: blob: 'unsafe-inline'"
.
, которая заставила меня осознать мою nginx конфигурацию безопасности, которую я сгенерировал, используя невероятную Инструмент, предоставленный DigitalOcean , включает следующую строку:
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
После удаления и перезапуска nginx все работает и выглядит так же, как и в моей среде разработки.
Из чего Теперь я теоретически делаю свой сайт уязвимым для атак XSS, но я не до конца понимаю, что делает этот параметр, или безопасно ли без него работать при этих обстоятельствах.