Ste*_*rov 10 html subresource-integrity
我想对Subresource Integrity属性进行软集成,因此请确保没有破坏应用程序,而只是警告我需要修复某些地方。
是否可以选择这样做?
如果您需要某种灵活性,那么您应该使用后备机制- 从另一个 URL 加载所需的资源。与仅攻击一种资源相比,两个不同 URL 同时被攻击的可能性要小得多。回退不会违反站点安全性,因为您必须信任在代码中使用的已知良好源。如果您的资源是 Javascript - 您也可以使用noncanonical-src属性进行后备。
\n\n现在,如果您真的非常希望用户通过强制加载受损的资源来破坏服务器和/或客户端安全 - 至少询问用户是否为此承担责任。当然这仍然是一件愚蠢的事情,就像问“你想在你的计算机中运行病毒吗? ”。我敢打赌没有人愿意说“是”。无论如何,这是代码,它确实提出了这些类型的问题:
\n\n<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>\n <script>\n function loadResource(path) {\n var xhttp = new XMLHttpRequest();\n xhttp.onreadystatechange = function() {\n if (this.readyState == 4 && this.status == 200) {\n var cs = CryptoJS.SHA256(this.responseText);\n if (btoa(cs) == \'NjBiMTllNWRhNmE5MjM0ZmY5MjIwNjY4YTVlYzExMjVjMTU3YTI2ODUxMzI1NjE4OGVlODBmMmQyYzhkOGQzNg==\' ||\n confirm(\'Bootstrap is NOT the latest version 4.3.1, load anyway ?\')\n ) {\n var link = document.createElement(\'link\');\n link.rel = "stylesheet";\n link.href = path;\n document.head.appendChild(link);\n }\n else {\n var err = document.getElementById(\'error\');\n err.title = "Component version error !";\n err.innerHTML = \' \xe2\x9a\xa0\xef\xb8\x8f\';\n }\n }\n };\n xhttp.open("GET", path, true);\n xhttp.send();\n }\n\n loadResource(\n //\'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css\' // newest boostrap\n \'https://stackpath.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css\' // old legacy\n );\n </script>\nRun Code Online (Sandbox Code Playgroud)\n\n\n