javascript - canvas 安全模型是否忽略了 access-control-allow-origin header ?

标签 javascript security html canvas

似乎即使您将 access-control-allow-origin header 设置为允许从 mydomain.org 访问域 example.org 上托管的图像, Canvas 的 origin-clean 标志也会设置为 false,并尝试操纵该图像的像素数据将触发安全异常。

canvas 不应该遵守 access-control-allow-origin header 并允许访问图像数据而不抛出异常吗?

最佳答案

实际上,如果图像具有值为“anonymous”的“crossOrigin”属性,canvas 确实支持“access-control-allow-origin”。

在固定示例中工作得很好:http://jsfiddle.net/WLTqG/29/

var ctx = document.getElementById('c').getContext('2d'),
    img = new Image();
img.crossOrigin = 'anonymous';
img.src = 'https://lh3.googleusercontent.com/-LAFgeyNL894/AAAAAAAAAAI/AAAAAAAAAAA/-CWBGs9xLXI/s96-c/photo.jpg';

img.onload = function() {
    ctx.drawImage(img, 0, 0);
    try {
        var imgData = ctx.getImageData(0, 0, 100, 100);
        $('.button').on('click', function(e) {
            e.preventDefault();
            applyFilter(ctx, imgData);
        });
    } catch(err) {
        $('.button').hide();
        $('body').append("Access denied");
        console.log(err);
    }
};
function applyFilter(ctx, data) {
    for (var x = 0; x < data.width; x++) {
        for (var y = 0; y < data.height; y++) {
            var index = 4 * (y * data.width + x);
            data.data[index] = data.data[index] - 50; //r
            data.data[index+1] = data.data[index+1] - 50; //g
            data.data[index+2] = data.data[index+2] - 50; //b
            data.data[index+3] = data.data[index+2] - 50; //a
        }
    }
    ctx.putImageData(data, 0, 0);
}

(我仅将 jQuery 用于 DOM 操作和事件处理)

关于javascript - canvas 安全模型是否忽略了 access-control-allow-origin header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2985097/

相关文章:

PHP |允许用户上传的安全性

javascript - 无法使用 jQuery 删除 img 的属性

JavaScript(咕噜声): regular expressions for path to a file

javascript - requestAnimationFrame 循环是如何工作的?

javascript - 可以打印出值,但是在setState中是 "undefined"

javascript - CSS/JavaScript 中的多列垂直滚动

security - 购买 SSL 证书时,它会自动附带根证书和中间证书吗?

asp.net - 在调试 ="true"中运行 Web 应用程序是否存在安全风险?

javascript - 我怎样才能制作这个自定义步进器?

javascript - 使用 CDN 与 NPM 安装库