编程语言
首页 > 编程语言> > javascript-js密码保护目录

javascript-js密码保护目录

作者:互联网

是否可以用密码保护(来自网站用户)服务器上的某些目录?它不一定是安全的,因为它只是为了防止学习者下载/访问其他课程的资料.学习者不是很精通技术,所以这没什么大不了的.

假设我有3门课程的目录:
    / course1
    / course2
    / course3

并且我希望每个目录都有其自己的密码,以便我可以向课程1的学习者发送电子邮件给其URL和密码.
我该怎么办?我对服务器的访问非常有限,因此客户端是唯一的选择.

解决方法:

Download the example here.

考虑到马克西米利安·劳梅斯特(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