„Dane” Polityki bezpieczeństwa treści nie działają dla obrazów base64 w Chrome 28

247

W tym prostym przykładzie próbuję ustawić nagłówek CSP z nagłówkiem meta http-equiv. Zawarłem obraz base64 i staram się, aby Chrome załadował obraz.

Myślałem, że datasłowo kluczowe powinno to zrobić, ale jakoś nie działa.

W Narzędziach programisty pojawia się następujący błąd:

Odmówił załadować 'danych: image / png; base64, R0lGODlhDwAPAOZEAMkJCfAwMMYGBtZMTP75 + euIiPFBP + hVVf3v7 ... nw7yk4Mjr6GLUY + joiBI2QAACABwJDCHgoKOHEoAYVBAgY8GGAxAoNGAmiwMHBCgccKDAKBAA7' wizerunku, ponieważ narusza dyrektywę o następującej treści: "Polityka bezpieczeństwa danych img-src 'ja'".

Przykładowy kod (JSFiddle nie działa w tym przykładzie, ponieważ nie mogę tam ustawić nagłówka meta):

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

Możesz również otworzyć ten przykład tutaj:
https://dl.dropboxusercontent.com/u/638360/ps/csp.html

fwebdev
źródło

Odpowiedzi:

468

Zgodnie z gramatyką w specyfikacji CSP musisz określić schematy jako scheme:nie tylko scheme. Musisz zmienić dyrektywę źródła obrazu na:

img-src 'self' data:;
Ostry ból
źródło
41
Powodem tej niezręczności jest to, że inaczej trudno odróżnić schemat „danych” od hosta o nazwie „dane”.
Mike West,
1
Wydaje mi się, że adresy URL są nieco niewygodne do analizy.
5
Miałem swoje dane: w cudzysłowie - „dane:” - to również nie działa - a twoja odpowiedź ostrzegła mnie również o tym jako problem
kris
18
Warto zauważyć, że nie należy tego dodawać bez uwzględnienia konsekwencji dla bezpieczeństwa. Zobacz to pytanie dotyczące wymiany stosu zabezpieczeń
Matthijs Wessels,
1
Skanery bezpieczeństwa znajdują dane: jako element niepewny
Sajithd
0

Spróbuj tego

dane do załadowania:

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

pobierz konwerter utf8 na base64 i przekonwertuj ciąg „svg” na:

PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUn
PjxwYXRoIGZpbGw9JyMzNDNhNDAnIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLz48L3N2Zz4=

a CSP jest

img-src data: image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUn
PjxwYXRoIGZpbGw9JyMzNDNhNDAnIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLz48L3N2Zz4=
JamesH
źródło
Nie sądzę, że możliwe jest dołączenie typu po protokole. Poprawne są tylko „dane:”.
rameezk