Chính sách bảo mật nội dung Dữ liệu trực tuyến không hoạt động cho Base64 Hình ảnh trong Chrome 28


247

Trong ví dụ đơn giản này, tôi đang cố gắng đặt tiêu đề CSP với tiêu đề meta http-Equiv. Tôi đã bao gồm một hình ảnh base64 và tôi đang cố gắng để Chrome tải hình ảnh.

Tôi nghĩ rằng datatừ khóa nên làm điều đó, nhưng bằng cách nào đó nó không hoạt động.

Tôi chỉ nhận được lỗi sau trong Công cụ dành cho nhà phát triển:

Từ chối tải dữ liệu của hình ảnh: hình ảnh / png; cơ sở 64, R64

Mã ví dụ (JSFiddle không hoạt động cho ví dụ này vì tôi không thể đặt tiêu đề 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>

Bạn cũng có thể mở ví dụ này tại đây:
https://dl.dropboxusercontent.com/u/638360/ps/csp.html

Câu trả lời:


467

Theo ngữ pháp trong thông số kỹ thuật CSP , bạn cần chỉ định các sơ đồ như scheme:, không chỉ scheme. Vì vậy, bạn cần thay đổi chỉ thị nguồn hình ảnh thành:

img-src 'self' data:;

41
Lý do cho sự lúng túng này là vì rất khó phân biệt giữa sơ đồ 'dữ liệu' và máy chủ có tên 'dữ liệu'.
Mike West

1
Tôi nghĩ rằng URL là một chút lúng túng để phân tích nói chung.

5
Tôi đã có dữ liệu của mình: trong ngoặc kép - 'dữ liệu:' - điều đó cũng không hoạt động - và câu trả lời của bạn cũng cảnh báo tôi rằng đó là một vấn đề
kris

18
Thật hữu ích khi lưu ý rằng bạn không nên thêm cái này mà không xem xét ý nghĩa bảo mật. Xem câu hỏi trao đổi ngăn xếp bảo mật này
Matthijs Wessels

1
Máy quét bảo mật tìm dữ liệu: là yếu tố không an toàn
Sajithd

0

Thử cái này

dữ liệu để tải:

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

lấy một bộ chuyển đổi utf8 sang base64 và chuyển đổi chuỗi "svg" thành:

PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUn
PjxwYXRoIGZpbGw9JyMzNDNhNDAnIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLz48L3N2Zz4=

và CSP là

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

Tôi không nghĩ có thể bao gồm một loại sau giao thức. Chỉ "dữ liệu:" là hợp lệ.
rameezk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.