2017-09-22 4 views
2

Je veux être en mesure de faireComment j'autorise `javascript: void (0)` à utiliser dans les attributs d'élément HTML via la stratégie de sécurité du contenu?

<form action="javascript:void(0)"> 

ou

<a href="javascript:void(0)"> 

pour assurer que rien ne se produit même si le gestionnaire ne parvient pas à empêcher l'action par défaut. Comment dois-je déclarer que cela est autorisé en utilisant l'en-tête de réponse HTTP Content-Security-Policy sans recourir à unsafe-eval?

+1

Pourquoi ne pas utiliser 'href =" # "'? – Barmar

+0

Parce qu'il sauterait au sommet de la page si ce n'est pas empêché. – Stephan

+1

Il est probablement préférable de s'assurer que n'importe quelle branche de votre gestionnaire empêche l'action plutôt que de mettre cette action/href là. – apokryfos

Répondre

0

Qu'en est-il de supprimer l'événement intégré et de le remplacer par un appel AJAX?

https://www.w3schools.com/js/js_ajax_examples.asp

+0

OP implique qu'il le fait déjà. Il a également cette action/href comme une sécurité intégrée pour empêcher l'action de toute façon au cas où le gestionnaire échoue. La question ici concerne la 'Content-Security-Policy' et la façon dont OP peut l'utiliser pour dire que '' javascript: void (0)' peut être utilisé comme une action/href ici '' – apokryfos

1

Je crois en votre question que vous vous contredisez.

Comment puis-je autoriser javascript:void(0) à utiliser dans l'élément HTML attributs par Content-sécurité-politique?

D'une part, vous définissez un en-tête Content Security Policy (CSP) auquel vous spécifiez une règle que je devine est script-src. Une directive utilisée pour empêcher l'exécution de scripts en ligne. Par contre, vous voulez le contourner et exécuter le javascript en ligne.

L'en-tête ne fonctionne-t-il pas comme prévu? L'ajout de 'unsafe-inline' le contournera, mais annule l'idée de ne pas autoriser les styles en ligne et les scripts en ligne (l'un des gains de sécurité les plus importants fournis par CSP).

Vous pouvez utiliser une source nonce pour autoriser uniquement des blocs de script en ligne spécifiques.

Exemple:

Content-Security-Policy: script-src 'nonce-2726c7f26c' 

Remarque, vous devrez régler le même sur l'élément nonce aussi bien.

<script nonce="2726c7f26c"> 
    var inline = 1; 
</script> 

Pour votre cas en utilisant les formulaires, l'en-tête serait:

Content-Security-Policy: form-action 'nonce-<value>' 

Vous pouvez également créer hash de vos scripts en ligne. CSP supporte sha256, sha384 et sha512.

Exemple:

Content-Security-Policy: script-src 'sha256-076c8f1ca6979ef156b510a121b69b6265011597557ca2971db5ad5a2743545f' 

Notez que lors de la génération du hachage, ne comprennent pas les balises et notez que la capitalisation et la matière des espaces, y compris avant ou arrière des espaces.

<script>var inline = 1;</script> 
+0

Utilisation de Content-Security-Policy I peut spécifier ce qui est autorisé et ce qui ne l'est pas. Je voudrais permettre à cette instance spécifique de javascript url d'être autorisée sans autoriser toutes les URL javascript, afin de diminuer la surface d'attaque des pirates. –

+0

Donc, fondamentalement, j'ai 'script-source 'self'' et je voudrais le changer pour autoriser cette seule URL javascript ainsi .. –

+0

@JonasBerlin La seule solution que je connais pour contourner cette restriction en utilisant CSP est d'utiliser 'dangereux-inline'. Mais je crois que cela nie toute l'idée du CSP. –