I'm trying to implement CSP, but cannot make the script-src work correctly. I strongly want to avoid unsafe-inline, but all attempts to circumvent this by using sha256 hashes seem to fail.

This is what happens: Several <a>tags on the page are being modified by javascript after loading (the modifying javascript is an external file from selfand is accepted and correctly executed). This javascript does the following to such an <a> tag:


(where showpart is defined in the aforementioend external javascript file). When I click on such a modified link, I get a CSP violation report. What confuses me slightly is that even if I temporarily use Content-Securtity-Policy: and not just Content-Securtity-Policy-Report-Only:, the website seems to function alright. I conclude that it is in fact the javascript:void(0); that triggers the error.

It should be possible to get rid of the error by supplying a suitable hash. I tried both

#echo -n "javascript:void(0);" | openssl dgst -binary -sha256 | base64


#echo -n "void(0);" | openssl dgst -binary -sha256 | base64

but without success (i.e. even with script-src containing


) the message still occurs.

What am I doing wrong?

1 Answer 1


Sorry, javascript: hrefs are not supported by csp hashes or nonces. I don't think they will ever be supported either. I used to actively participate in the w3c webappsec where csp and hashes were defined and I seem to recall this coming up and the group simply saying that javascript: hrefs need to go away. I could also be misremembering with a bias to my own feelings towards that pattern :)

If you want to avoid the violation, I think you could bind the click event and prevent propagation of the event.

  • So if I interprete that correctly, I should not set href at all, change the signature of showpart to showpart(this, event) and in it do event. stopPropagation()? May 5, 2016 at 19:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.