-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Désactive la vérification de la Content-Security-Policy en développement #179
Conversation
Codecov Report
@@ Coverage Diff @@
## main #179 +/- ##
===========================================
Coverage 100.00% 100.00%
Complexity 341 341
===========================================
Files 85 85
Lines 1436 1436
===========================================
Hits 1436 1436 Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. |
Je ne sais pas si cela peut résoudre le problème, mais tu peux override les pages d'erreurs https://symfony.com/doc/current/controller/error_pages.html. Est-ce que tu penses que ça pourrait faire l'affaire ? (je n'ai pas creusé plus que ça). |
@mmarchois Je viens d'essayer (j'y ai passé 1h) et je suis à nouveau bloqué par le fait que le J'ai d'abord essayé en ajustant directement le HTML produit par le renderer : <?php
declare(strict_types=1);
namespace App\Infrastructure\Controller;
use Nelmio\SecurityBundle\EventListener\ContentSecurityPolicyListener;
use Symfony\Component\ErrorHandler\ErrorRenderer\ErrorRendererInterface;
use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
use Symfony\Component\ErrorHandler\Exception\FlattenException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\KernelInterface;
final class ErrorController
{
private ErrorRendererInterface $renderer;
public function __construct(
KernelInterface $kernel,
private ContentSecurityPolicyListener $cspListener,
)
{
$this->renderer = new HtmlErrorRenderer($kernel->isDebug());
}
public function __invoke(Request $request, \Throwable $exception): Response
{
$exception = $this->render($request, $exception);
return new Response($exception->getAsString(), $exception->getStatusCode(), $exception->getHeaders());
}
public function render(Request $request, \Throwable $exception): FlattenException
{
$exc = $this->renderer->render($exception);
$nonce = $this->cspListener->getNonce('script');
$content = $exc->getAsString();
$content = \str_replace('<head>', "<head><meta name=\"csp-nonce\" content=\"$nonce\">", $content);
$content = \str_replace('<script>', "<script nonce=\"$nonce\">", $content);
$content = \str_replace('<style>', "<style nonce=\"$nonce\">", $content);
$exc->setAsString($content);
return $exc;
}
} Avec ça j'ai bien les nonces sur les Pour les scripts, Turbo retire les De façon assez rigolote, le En fait, Turbo est chargé dans une page où la CSP est activée (sauf avec cette PR qui désactive la CSP en dev). Donc quand une réponse est obtenue, il va remplacer le head et le body dans un contexte où cette CSP initiale est appliquée par le navigateur. Donc cette précaution de Symfony est inopérante... Donc ma conclusion était : désactivons la CSP en dev... |
0cb1662
to
97564bb
Compare
Closes #177
Voir #177 (comment)
L'objectif est de faire fonctionner les pages d'erreur (contourner un bug dans Symfony : absence de nonces dans ces pages d'erreur) pour une meilleure expérience de développement.
L'inconvénient est qu'on ne verra pas les éventuels problèmes de CSP avant un déploiement (sur une branche de PR par exemple).
Mais ça résout aussi les problèmes de CSP intempestives liées à Turbo (en partie résolues ici #148) car elles ne se présentaient qu'en local.