canvas | Безопасность с элементами холста

canvas | Безопасность с элементами холста

Этот раздел не является нормативным.

Утечка информации (Information leakage) может произойти, если скрипты из одного источника могут получить доступ к информации (например, считывать пиксели) из изображений из другого источника (не того же самого).

Чтобы смягчить это, растровые изображения, используемые с элементами холста canvas и объектами ImageBitmap, определены так, чтобы иметь флаг, указывающий, являются ли они чистыми от источника. Все растровые изображения начинаются с очистки от источника, установленной в true. Флаг устанавливается в значение false, когда используются изображения из разных источников.

Методы toDataURL(), toBlob() и getImageData() проверяют флаг и вызывают исключение DOMException «SecurityError«, а не утечку данных из разных источников.

Значение флага очистки источника распространяется из растрового изображения исходного элемента холста canvas в новый объект ImageBitmap с помощью createImageBitmap(). И наоборот, для растрового изображения целевого элемента холста canvas флаги очистки происхождения будут установлены в false с помощью drawImage, если исходное изображение является объектом ImageBitmap, для которого растровое изображение имеет флаг очистки происхождения, установленный в значение false.

Флаг можно сбросить в определенных ситуациях; например, при изменении значения атрибута содержимого ширины width или высоты height элемента холста canvas, к которому привязан CanvasRenderingContext2D, растровое изображение очищается, а его флаг очистки источника сбрасывается.

При использовании ImageBitmapRenderingContext значение флага очистки источника распространяется от объектов ImageBitmap, когда они переносятся на холст с помощью метода transferFromImageBitmap().

Информационные ссылки

Стандарт HTML — Раздел «4.12.5.6 Security with canvas elements» — https://html.spec.whatwg.org/multipage/canvas.html#security-with-canvas-elements