İçerik Güvenliği Politikası “veriler” base64 için çalışmıyor Chrome 28'deki resimler


247

Bu basit örnekte, meta http-equiv üstbilgisiyle bir CSP başlığı ayarlamaya çalışıyorum. Bir base64 resmi ekledim ve Chrome'un resmi yüklemesini sağlamaya çalışıyorum.

dataAnahtar kelimenin bunu yapması gerektiğini düşündüm , ancak bir şekilde çalışmıyor.

Geliştirici Araçları'nda şu hatayı alıyorum:

Görüntünün verilerini yüklemeyi reddetti: image / png; base64, R0lGODlhDwAPAOZEAMkJCfAwMMYGBtZMTP75 + euIiPFBP + hVVf3v7… nw7yk4Mjr6GLUY + joiBI2QAACABwJDCHgoKOHEoG0gg0gg0gg0gg0gg0gg0gg0gg0g0gg0gg0gg0gg0g0g0gg0gg08gg0gg0g0gg0gg0

Örnek kod (orada meta üstbilgi ayarlayamıyorum çünkü JSFiddle bu örnek için çalışmıyor):

<html>
<head>
<meta http-equiv="Content-Security-Policy" content="
        default-src 'none';
        style-src 'self' 'unsafe-inline';
        img-src 'self' data;
        " />
    <style>
        #helloCSP {
            width: 50px;
            height: 50px;
            background: url(data:image/png;base64,R0lGODlhDwAPAOZEAMkJCfAwMMYGBtZMTP75+euIiPFBP+hVVf3v7+iHh/JNTfh9dNUYGPjTvskXFfOLi/daVe96es4eHPWIiOqbi9dNRvzWwexdV9U1NeFSS94iIvuxodVGP/ZsZM8jI+ibm/alluQzMdxSSvbGstwsKu2Yid4iIfjQu/JnYO6djvajlMQEBPvLuOJdXeMxL/3jzPBSTdwqKNY2Mf3i4vU5OfbPz/3f3/zUv/zizO0tLc0NDfMzM+UlJekpKeEhId0dHdUVFdkZGdEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEQALAAAAAAPAA8AAAepgESCRBsLEDQQCxuDgxYdO5CROx0WgywGAQEKM0M2CpkGN0QvMDmmE0OpE6Y5KEQqPbE9D6lDD7I9IBc8vDwRtRG9PBcuPsY+B7UHxz4hP8/PGghDCBrQPyYxQdvbBUMF3NskGUDl5QwtDOblGSVC7+8JNQnw7yk4Mjr6GLUY+joiBI2QAACABwJDCHgoKOHEoAYVBAgY8GGAxAoNGAmiwMHBCgccKDAKBAA7) no-repeat;
            border: 1px solid red;
        }
    </style>
</head>
<body>
<h1>CSP</h1>
    <div id="helloCSP"></div>
</body>
</html>

Bu örneği burada da açabilirsiniz:
https://dl.dropboxusercontent.com/u/638360/ps/csp.html

Yanıtlar:


468

CSP spesifikasyonundaki dilbilgisine göre , şemaları scheme:sadece değil, belirtmeniz gerekir scheme. Bu nedenle, resim kaynağı yönergesini şu şekilde değiştirmeniz gerekir:

img-src 'self' data:;

41
Bu garipliğin sebebi, 'veri' şeması ile 'veri' adlı bir ana bilgisayarı birbirinden ayırt etmenin zor olmasıdır.
Mike West

1
URL'lerin genel olarak ayrıştırılması biraz garip olduğunu düşünüyorum.

5
Verilerimi aldım: tırnak içinde - 'veri:' - bu da işe yaramaz - ve cevabınız da beni bir sorun olarak uyardı
kris

18
Güvenlik sonuçlarını dikkate almadan bunu eklemeniz gerektiğini belirtmek yararlıdır. Bkz bu güvenlik yığını değişimi soru
Matthijs Wessels

1
Güvenlik tarayıcıları veri bulur: güvensiz eleman olarak
Sajithd

0

Bunu dene

yüklenecek veriler:

<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'><path fill='#343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>

utf8'i base64 dönüştürücüsüne alın ve "svg" dizesini şuna dönüştürün:

PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUn
PjxwYXRoIGZpbGw9JyMzNDNhNDAnIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLz48L3N2Zz4=

ve CSP

img-src data: image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUn
PjxwYXRoIGZpbGw9JyMzNDNhNDAnIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLz48L3N2Zz4=

Protokolden sonra bir tür eklemek mümkün olduğunu sanmıyorum. Yalnızca "data:" geçerlidir.
rameezk
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.