Komut dosyası ve stil öğeleri için HTML "nonce" niteliğinin amacı nedir?


142

W3C orada denilen HTML5.1 yeni özellik olduğunu söylüyor nonceiçin styleve scriptbir web sitesinin içeriği Güvenlik Politikası tarafından kullanılabilir.

Google'da araştırdım ama sonunda bu özelliğin gerçekte ne yaptığını ve onu kullanırken ne değiştiğini anlamadım?


2
Görünüşe göre siteniz için fazladan bir güvenlik parçası, onu bir bağlantıya veya bir forma eklersiniz ve sayfa sunulduğunda, nonce sizinkiyle eşleşmezse, o zaman sayfayı
sunmazsınız

Daha sonra kimse senin yük olabilir demek @Pete scriptve style? Hotlink yasağı gibi bir şey?
ata

aynı zamanda normal sayfalar ve form doğrulama için
Pete

Yanıtlar:


198

nonceBu özellik, “Beyaz liste” belirli satır içi sağlar scriptve styleCSP kullanımını kaçınırken, elementlerin unsafe-inline(izin verecek direktif tüm inline script/ styleyine siz satır içi izin vermeme anahtar CSP özelliğini koruduğunu,) script/ stylegenel olarak.

Bu nedenle nonceöznitelik, tarayıcılara, belirli bir komut dosyasının veya stil öğesinin satır içi içeriğinin bazı (kötü niyetli) üçüncü taraflarca belgeye enjekte edilmediğini, bunun yerine belgenin sunulduğu sunucuyu kontrol eden kişi tarafından kasıtlı olarak belgeye konulduğunu söylemenin bir yoludur. dan.

https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_itnonce , aşağıdaki adımlar anlamına gelen özelliğin nasıl kullanılacağına dair iyi bir örnek verir :

  1. Web sunucunuzun belirli bir belge için aldığı her istek için, arka ucunuzun kriptografik olarak güvenli bir rasgele sayı üretecinden en az 128 bit veriden oluşan, base64 kodlu rastgele bir dizi oluşturmasını sağlayın; örneğin EDNnf03nceIOfn39fn3e9h3sdfa,. Bu senin adın.

  2. 1. adımda oluşturulan nonce'yi alın ve herhangi bir satır içi script/ style"beyaz listeye eklemek" istediğiniz için, arka uç kodunuzun nonce, tel üzerinden gönderilmeden önce belgeye bir öznitelik eklemesini sağlayın ;

    <script nonce="EDNnf03nceIOfn39fn3e9h3sdfa"></script>
  3. 1. adımda oluşturulan nonce, prepend al nonce-kendisine ve arka uç için kaynak listesinin değerleri arasında bununla ilgili bir CSP başlığı oluşturmak yapmak script-srcveya style-src:

    Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'

Dolayısıyla, bir nonce kullanma mekanizması, arka ucunuzun satır içi içeriğin bir karmasını oluşturmasına scriptveya styleizin vermek istediğinize ve ardından bu karmayı CSP başlığınızdaki uygun kaynak listesinde belirtmenize bir alternatiftir .

Tarayıcılar, sayfa istekleri arasında gönderilen nonce değerinin değişip değişmediğini kontrol edemediğinden (yapamadığından), yukarıdaki 1'i atlamak ve arka ucunuzun nonce için dinamik bir şey yapmasını istememek mümkündür - tamamen tavsiye edilmez - bu durumda, nonceDokümanınızın HTML kaynağına statik değer içeren bir öznitelik ekleyebilir ve aynı nonce değerine sahip statik bir CSP başlığı gönderebilirsiniz.

Ancak bu şekilde statik bir nonce kullanmak istememenizin nedeni, başlangıçta nonce kullanmanın tüm amacını neredeyse tamamen ortadan kaldırmasıdır - çünkü, bunun gibi statik bir nonce kullanırsanız, bu noktada sadece kullanıyor olabilirsiniz unsafe-inline.


17
Bu kullanıcıyı doğrulamak için değil - belirli bir komut dosyasının veya stil öğesinin satır içi içeriğinin belgeye bazı (kötü niyetli) üçüncü bir tarafım tarafından enjekte edilmediğini, bunun yerine belgeyi sunucuyu kontrol eden kişi tarafından kasıtlı olarak yerleştirildiğini doğrulamak içindir. dan servis edilir. (Bunu söylemek için cevabımı güncelleyeceğim.)
sidehowbarker

3
Birliklerin depolanması gerekmez - bunun yerine bellekte oluşturulurlar ve CSP başlığına ve yanıtlarda tel üzerinden gönderilen HTML belgesine eklenirler (sunucu dosya sisteminde / veritabanında depolanan kaynağa değil).
sidehowbarker

3
nonceÖzniteliği kullanmak için çaba sarfetmek için herhangi bir nedene gelince, onu kesinlikle kullanmanız gerekmiyorsa, kullanmayın. Gerçekten yalnızca, belirli bir belgeden (henüz) bazı satır içi komut dosyası veya stil içeriklerinden kurtulamadığınız (ancak daha sonra kaldırmanız gerekir) durumlar içindir. Dolayısıyla, herhangi bir nedenle satır içi komut dosyası ve stil içeriklerini tutmaya ihtiyaç duyuyorsanız, bu arada tarayıcıların iyi olduklarını doğrulamasına izin vermek için en azından nonce mekanizmasını kullanabilirsiniz. Aksi takdirde, CSP'yi gerçekten amaçlandığı gibi tam olarak kullanmalı ve herhangi bir satır içi komut dosyası veya stil öğesine izin vermemelisiniz
sidehowbarker

2
@sideshowbarker, Boş bir nonce ne işe yarar? Ben sayfaları görüyorum <script type="text/javascript" nonce>ve<style type="text/css" nonce>
Pacerier

7
Not: Komut dosyanız statikse, nonce yerine bir CSP hash'i öneririm.
Brian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.