web-dev-qa-db-fra.com

Le script provoque «Refusé d'exécuter le script en ligne: soit le mot clé« unsafe-inline », un hachage… ou un nonce est requis pour activer l'exécution en ligne»

Je reçois toujours cette erreur:

Refus d'exécuter le script en ligne car il viole la directive de politique de sécurité du contenu suivante: "default-src 'self' data: gap: http://www.visitsingapore.comhttps: // ssl.gstatic.com 'unsafe-eval' ". Le mot clé 'unsafe-inline', un hachage ('sha256-V +/U3qbjHKP0SaNQhMwYNm62gfWX4QHwPJ7We1PXokI ='), ou un nonce ('nonce -...') est requis pour activer l'exécution en ligne. Notez également que 'script-src' n'a pas été explicitement défini, donc 'default-src' est utilisé comme solution de rechange.

Quelqu'un peut-il me dire comment résoudre ce problème et qu'est-ce que cela signifie? Mon code est:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data:gap: http://www.visitsingapore.com   https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="css/index.css">
<link rel="stylesheet" href="css/jquery.mobile-1.4.5.css">
<script src="lib/jquery-3.2.1.min.js"></script>

<script type="text/javascript" src="scripts/key.js"></script>
<script>$.ajax({
        url: ' http://www.visitsingapore.com/api.listing.en.json',
        type: 'GET',
        beforeSend: function (xhr) {
            xhr.setRequestHeader('email ID', '[email protected]');
            xhr.setRequestHeader('token ID', '-------');
        },
        data: {},
        success: function (qwe12) {
            var TrueResult2 = JSON.stringify(qwe12);
            document.write(TrueResult2);
        },
        error: function () { },
    });</script>
7
Yi Kiat

La meilleure façon de résoudre ce problème serait de retirer cet appel de $.ajax(…) du document et de le déplacer dans un fichier externe appelé ajax-call.js, puis procédez comme suit:

<script src="ajax-call.js"></script>

La raison en est que si vous faites déjà l'effort de définir une stratégie CSP pour votre document, vous devriez idéalement faire l'effort supplémentaire de supprimer tous les scripts en ligne.

Mais si, pour une raison quelconque, vous avez vraiment besoin de conserver ce script en ligne dans le document, vous pouvez modifier cet élément meta de sorte que sha256 exact la valeur de hachage du message d'erreur est incluse comme source pour le script-src directive, comme ceci (avec quelques sauts de ligne ajoutés juste pour la lisibilité):

<meta http-equiv="Content-Security-Policy"
  content="default-src 'self' data:gap: http://www.visitsingapore.com 
  https://ssl.gstatic.com 'unsafe-eval';
  style-src 'self' 'unsafe-inline';
  media-src *;
  script-src: 'sha256-V+/U3qbjHKP0SaNQhMwYNm62gfWX4QHwPJ7We1PXokI='
">

Et quelques endroits pour obtenir un peu plus d'informations:

4
sideshowbarker