"Дані" політики безпеки вмісту не працюють для базових зображень64 в Chrome 28


247

У цьому простому прикладі я намагаюся встановити заголовок CSP з заголовком мета http-equiv. Я включив зображення base64, і я намагаюся змусити Chrome завантажити зображення.

Я думав, що це dataмає зробити ключове слово, але якимось чином не працює.

Я просто отримую таку помилку в Інструментах для розробників:

Відмовився, щоб завантажити дані ': зображення / PNG; base64, R0lGODlhDwAPAOZEAMkJCfAwMMYGBtZMTP75 + euIiPFBP + hVVf3v7 ... nw7yk4Mjr6GLUY + joiBI2QAACABwJDCHgoKOHEoAYVBAgY8GGAxAoNGAmiwMHBCgccKDAKBAA7' зображень, тому що він порушує такі директиви Content Security Policy: "IMG-Src 'самість' дані".

Приклад коду (JSFiddle не працює для цього прикладу, тому що я не можу встановити мета-заголовок там):

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

Ви також можете відкрити цей приклад тут:
https://dl.dropboxusercontent.com/u/638360/ps/csp.html

Відповіді:


468

Відповідно до граматики у специфікації CSP , вам потрібно вказати схеми як scheme:, а не просто scheme. Отже, вам потрібно змінити директиву джерела зображення на:

img-src 'self' data:;

41
Причиною цієї незграбності є те, що інакше важко розрізнити схему "дані" та хост із назвою "дані".
— Майк Вест

1
Я думаю, що URL-адреси взагалі трохи незручно розбирати.

5
У мене були свої дані: у цитатах - "дані:" - які також не спрацьовують - і ваша відповідь також насторожила мене про це як про проблему
— kris

18
Корисно зауважити, що ви не повинні просто додавати це, не враховуючи наслідків для безпеки. Дивіться це запитання щодо обміну
— стеками

1
Сканери безпеки знаходять дані: як незахищений елемент
— Sajithd

0

Спробуйте це

дані для завантаження:

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

отримати конвертор utf8 до base64 та перетворити рядок "svg" у:

PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUn
PjxwYXRoIGZpbGw9JyMzNDNhNDAnIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLz48L3N2Zz4=

і ДСП є

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

Я не вважаю можливим включити тип після протоколу. Дійсні лише "data:".
— rameezk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.