2016-03-28 14 views
1

Satır içi işleyicilerin her satır içi olay komut dosyası için sha-256 karmalarını kullanarak krom uzantısında yürütmeyi etkinleştirmek için bir içerik güvenliği ilkesi uygulamaya çalışıyorum.Chrome extension Satır içi olay komut dosyası için CSP sha-256 hash

Ama bu işe alınamıyor: onclick="w2ui['grid'].click('1', event);" örneğin

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

, ben sha256-Zy8+Ft7FDcIkrTYgl2BKmEW5XD97XustxKPceyLSioQ=

olsun: Ben content_security_policy şimdi şöyle görünür şekilde tüm inlines ve hesaplanan karmaları, çıkarılan

The docs state bu yöntemi desteklenen bir ama yine de atar hatalar

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.

Bilinen bir hata mı yoksa sadece kavramı yanlış mı kullanıyorum?

+0

Krom dan kullanılan ben 'unsafe-eval' izni kullanan tüm inlines önceden değerlendirerek bu geçici bir çözüm başardı normalde ihtiyacınız olan sha256 değerini gösterir, ancak hata mesajınızda ... gösterdiyseniz. Chrome, yaptığınız gibi aynı karma değerini mi hesapladı? –

+0

no - chrome tam anlamıyla anlamsızdır 'Satır içi güvenli olmayan' anahtar sözcüğü, bir karma ('sha256 -...') veya bir nonce ('non -...') satır içi yürütmeyi etkinleştirmek için gereklidir. – grandrew

cevap

0

Buradaki cevap, kromun - bir nedenden dolayı - satır içi olayları desteklemediği anlamına gelmiyor;

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; 
     } 
    } 
} 

ve .onload bu ekleme:

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 Ben this answer

İlgili konular