javascript-js密码保护目录
作者:互联网
是否可以用密码保护(来自网站用户)服务器上的某些目录?它不一定是安全的,因为它只是为了防止学习者下载/访问其他课程的资料.学习者不是很精通技术,所以这没什么大不了的.
假设我有3门课程的目录:
/ course1
/ course2
/ course3
并且我希望每个目录都有其自己的密码,以便我可以向课程1的学习者发送电子邮件给其URL和密码.
我该怎么办?我对服务器的访问非常有限,因此客户端是唯一的选择.
解决方法:
考虑到马克西米利安·劳梅斯特(Maximilian Laumeister)的想法,我想到了这一点.这可能不是一个完美的解决方案,但应该可以.
您将所有资源加密存储在服务器上,并以纯文本文件形式编码为base64.您可以用逗号分隔,然后加上所需的mime类型.例如.
>主要:(CryptoJS.AES.encrypt(‘< a href =“ http:// localhost:8080 / _ / more”>阅读更多< / a>‘,“ hello”).toString();)
text/html;U2FsdGVkX19Tdq6V7swK/7NgnwR8JgZ1dYZEkfT9hx+QKzFrpyqKeuo0Tv25ozYkAxIIt65G9DKmOYU6tmZ0Dp/I4BuopQ/3xHClB+K+BX8=
>更多:(CryptoJS.AES.encrypt(‘h1> More< / h1> porem ipsum dolor sit< / p>‘,“ hello”).toString();)
text/html;U2FsdGVkX19GdZ+SRQ9vM2Amiyu0OqOOSX7X5IOCcLfHMpHHgI0h/mxS8iuUggfqmFBN+yXy53z445ZW1mAlHQ==
在超链接中,您必须在URL(_ /)中放置一些内容,从而导致404(以后可以将其删除),并且必须指定包括服务器在内的协议.这是脚本截获,停止请求,请求正确的URL并解码响应的唯一方法. (需要404,因为浏览器会直接下载指定的文件,并且不会调用加载事件处理程序.)
然后,您创建一个index.html页面,其中包含一个iframe,并要求用户输入密码,然后将该密码保留在某个范围内,以使任何XSS攻击都无法检索该值.
<html>
<head>
<meta charset="utf8">
</head>
<body>
<iframe id="theIframe"></iframe>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script src="script.js"></script>
</body>
</html>
这使您可以请求URL,解码接收到的base64内容并尝试使用给定的密码对其进行解密.然后,您可以通过数据网址将解密后的内容设置为iframe的内容.
(function(){
var iframe = document.getElementById("theIframe");
var password = prompt("Enter the password!");
var allowEvent = true;
function presentURL(url){
allowEvent = false;
var req = new XMLHttpRequest();
req.addEventListener("load", function(){
var splitters = this.responseText.split(";", 2);
var type = splitters[0];
var encrypted = splitters[1];
var decrypted = CryptoJS.AES.decrypt(encrypted, password).toString(CryptoJS.enc.Utf8); //Decrypt
var data = window.btoa(decrypted); //Encode the decrypted data into base64
iframe.src = "data:" + type + ";base64," + data;
});
req.open("GET", url);
req.send();
}
presentURL("/main");
iframe.addEventListener("load", function(e){
e.preventDefault();
if (allowEvent){
iframe.contentWindow.stop();
//remove the 404 cause and call presentURL
presentURL(iframe.contentWindow.location.href.replace(/_\//, ""));
}
else {
allowEvent = true;
}
});
})();
上面的示例使用CryptoJS,可能无法在所有浏览器中使用!
该代码实际上有效!
标签:password-protection,javascript 来源: https://codeday.me/bug/20191119/2037936.html