2016-03-28 13 views
1

コンテンツセキュリティポリシーを実装して、各インラインイベントスクリプトに対してsha-256ハッシュを使用してクロムエクステンションでインラインハンドラを実行できるようにしようとしています。インラインイベントスクリプトのCSP sha-256ハッシュ

しかし、私はこの仕事を得ることができない:私はすべてのインラインと計算されたハッシュを抽出し、私のcontent_security_policyは次のようになりますように:例えば

"content_security_policy": "script-src 'self' 'unsafe-eval' 'sha256-Zy8+Ft7FDcIkrTYgl2BKmEW5XD97XustxKPceyLSioQ=' 'sha256-YNkUpNj1B2/FuE2RmwQf40OIO5rH69xQbG5AAxwshrA=' 'sha256-Pmun4RTarna683hWYftYdXPERPfEVV5fB+qvqh3xnmg=' ... ... 'sha256-RoSxVuvjYKDbU5f+aUEw02rEM9e2Lp9Hz/+rxbp6OMw='; object-src 'self'"

onclick="w2ui['grid'].click('1', event);"のために私はsha256-Zy8+Ft7FDcIkrTYgl2BKmEW5XD97XustxKPceyLSioQ=

を取得

The docs stateこのメソッドをサポートされているが、それはまだスローするエラー

Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' 'sha256-Zy8+Ft7FDcIkrTYgl2BKmEW5XD97XustxKPceyLSioQ=' 'sha256-YNkUpNj1B2/FuE2RmwQf40OIO5rH69xQbG5AAxwshrA=' 'sha256-Pmun4RTarna683hWYftYdXPERPfEVV5fB+qvqh3xnmg=' ... ... Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.

既知のバグですか、それとも概念を悪用していますか?

+0

Chromeから使用私は'unsafe-eval'許可を使用して、すべてのインラインを事前に評価することにより、この問題を回避することができましたあなたが必要とするsha256の値が表示されますが、エラーメッセージに表示されています。 Chromeはあなたと同じハッシュ値を計算しましたか? –

+0

no-chromeは、 'unsafe-inline 'キーワード、ハッシュ(' sha256 -... ')、またはnonce(' nonce -... ')のいずれかがインライン実行を有効にするために必要です。 – grandrew

答えて

0

ここでの答えは、クロムは何らかの理由で、インラインイベントハッシュをまったくサポートしていないようです。

var events = ["onclick", "onmouseover", "onmouseout", "onmousedown", 
"onmouseup", "onscroll", "oncontextmenu", "onmousewheel", "ondblclick"]; 
function vulcanize_inlines() { 
    for(var i=0;i<events.length;i++) { 
     var els = getAllElementsWithAttribute(events[i]); 
     for(var j=0;j<els.length;j++) { 
      var fun = eval("(function a(){"+els[j].getAttribute(events[i])+"})"); 
      els[j].removeAttribute(events[i]); 
      els[j][events[i]] = fun; 
     } 
    } 
} 

.onloadにこれを追加する:

vulcanize_inlines(); 
var target = document.body; 
var observer = new MutationObserver(function(mutations) { 
    vulcanize_inlines(); 
}); 
var config = { /*attributes: true,*/ childList: true, 
    characterData: true, subtree: true }; 
observer.observe(target, config); 

getAllElementsWithAttributeは私がthis answer

関連する問題