1

我最近了解了子资源完整性,它可以防止执行更改的 JS 和 CSS。由于当前的实现缺乏对图像的支持,我尝试用自己的实现进行试验。

<img data-src="http://localhost:8888/4.jpg" alt="" data-hash="" class="image">
<img data-src="http://localhost:8888/2.jpg" alt="" data-hash="" class="image">
<img data-src="http://localhost:8888/3.jpg" alt="" data-hash="" class="image">


<script src="qwest.js"></script>
<script src="md5.min.js"></script>
<script>

var images = document.getElementsByClassName("image");

     for( var i = 0, len = images.length; i < len; i++){
        popHash(images[i]);

    }

    function popHash(image) {

        qwest.get(image.dataset.src, {}, {responseType:"blob"})
        .then(function (xhr, response) {
            var src = window.URL.createObjectURL(response);
            image.src = src;
            image.dataset.hash = md5(src); 
           console.log(image.dataset.hash);


            /* code to check the equality of hashes here */
        }) 
    }


</script>

问题是每次我得到不同的 MD5 哈希。请帮助我找出我做错了什么。

我使用 JavaScript-MD5 ( https://github.com/blueimp/JavaScript-MD5 ) 获取 MD5 哈希和 Qwest.js ( https://github.com/pyrsmk/qwest ) 获取图像

4

1 回答 1

1

通过轻微的变化,我能够得到正确的结果。我使用 arrayBuffer 而不是 blob 和 sha-256 散列。我为此做了一个小图书馆。

https://github.com/ShopupStore/IntegrityChecker

于 2017-05-19T02:47:43.907 回答