为什么不要将账号密码定义在JS中!

本文讲述了作者在学习前端时,尝试用JS在GitHub Pages上为个人网页设置密码保护。虽然在审查元素中看不到源码,但通过网络面板可以获取到包含密码逻辑的JS代码,从而揭示了仅依赖JS进行安全性防护的不足。作者通过Python爬虫演示了如何轻易获取并破解该密码,提醒开发者注意前端密码安全的重要性。
摘要由CSDN通过智能技术生成

刚开始学前端的时候,做了一个页面放在github的gitpage上面,可以通过连接访问网页,为了体验设置密码的快感,我也给我的页面设置了一个密码,但是gitpage只能配置静态页面,所以我网页的密码只能用JS来实现。

  <script >a=prompt("管理员用户")
        alert(`你好${a}`)
        while(a!='admin'){b=prompt("管理员密码")
        if (b=="123456")
        break;
        
        }
        
        if(b!=("123456"))
        {while(b!=("123456")){
            b=confirm("密码错误")
        }}
        else if(b==123456){
            alert("欢迎光临此网站")
        }
        
        </script>

上面代码实现了第一次输入一个用户名,如果用户名为admin,则直接进入网站,如果用户名为其他,则需要输入密码,如果密码为123456则进入。若不为123456则无法进入。

上线网站后,进入页面按F12,查看网页代码

发现在审查元素中看不到源码,嗯,看起来十分安全。那为什么不用JS来储存密码呢,而是在后端里面用数据库进行储存。下面一段某乎上面的解答。

 “每个人都可以看到源码”??

于是我重新打开我的页面进行审查,准备自己破解自己的密码。

破解密码的过程十分简单,简单到我觉得之前用JS储存密码的行为像个zz

按F12,进入network,可以发现我页面的html文件是存在的,而我储存密码的JS代码就在其中。

打开python,对我的网页进行爬取,获得html文件。

import requests
from lxml import etree
url="网址"
resp=requests.get(url=url)
print(resp.text)

在终端中发现了JS代码

果然将账号密码定义在JS中,所有人都可以轻易看到密码

最后就把这个乌龙页面送给大家破解吧,账号不是admin,密码也不是123456,大家自己去试吧

My_first_web

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例代码,实现了多用户账号代码定义,未登录拦截所有请求,首页为登录页,登录后跳转index.html: ```javascript const http = require('http'); const url = require('url'); // 定义用户账号 const users = [ { username: 'user1', password: 'password1' }, { username: 'user2', password: 'password2' }, { username: 'user3', password: 'password3' }, ]; // 定义已登录的用户 const loggedInUsers = new Set(); // 创建 HTTP 服务器 const server = http.createServer((req, res) => { const parsedUrl = url.parse(req.url, true); // 拦截所有请求,如果用户未登录则跳转到登录页 if (!loggedInUsers.has(req.socket.remoteAddress)) { if (parsedUrl.pathname !== '/login') { res.writeHead(302, { Location: '/login' }); res.end(); return; } } // 处理登录请求 if (parsedUrl.pathname === '/login') { const { username, password } = parsedUrl.query; const user = users.find(u => u.username === username && u.password === password); if (user) { loggedInUsers.add(req.socket.remoteAddress); res.writeHead(302, { Location: '/index.html' }); res.end(); return; } else { res.writeHead(401); res.write('Unauthorized'); res.end(); return; } } // 处理其他请求 // 在这可以加上其他的路由处理逻辑 // 比如根据不同的请求路径返回不同的文件 }); // 监听端口 server.listen(8080, () => { console.log('Server started on port 8080'); }); ``` 在这个示例代码,我们首先定义了一组用户账号,然后创建了一个 Set 来存储已登录的用户。当用户访问其他页面时,我们会判断该用户是否已登录,如果未登录则跳转到登录页。登录页的路径是 `/login`,用户需要在 URL 参数提供用户名和密码。如果用户名和密码正确,则将该用户的 IP 地址添加到已登录用户的 Set ,并将其重定向到 `/index.html` 页面。如果用户名或密码不正确,则返回 401 Unauthorized 错误。 在实际的应用,我们可以根据需要修改这个示例代码,添加更多的路由处理逻辑,比如处理其他的静态文件、API 请求等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值