当前位置:首页 > 焦点

html输入密码进入页面

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>html输入密码进入页面</title> </head> <body> <h3>密码门</h3> <p>凌晨两点,输入我盯着浏览器里那个孤零零的密码输入框,突然意识到自己干了一件蠢事——把整个项目的进入后台管理页面做成了公开URL。任何知道地址的页面人都能直接访问,连个验证都没有。输入那天晚上我爬起来写了第一版密码保护,密码用的进入就是最原始的HTML+JavaScript方案。</p> <p>做法其实糙得很。页面页面加载时先弹出一个prompt框,输入让访问者输入密码,密码如果输入正确就显示内容,进入错误就跳转到百度。页面代码长这样:</p> <pre><code> var pass = prompt("请输入访问密码"); if (pass !== "mypassword123") {  window.location.href = "https://www.baidu.com"; } </code></pre> <p>这段代码放在<body>最顶部,输入后面的密码内容全被它挡住。表面看确实实现了“输入密码才能进入页面”的进入效果,但稍微懂点前端的人都知道,这玩意儿跟纸糊的没两样。按F12打开开发者工具,把那段if语句删掉,页面内容直接裸露。更绝的是,密码就写在源代码里,按Ctrl+U就能看到。</p> <p>可奇怪的是,这种“伪保护”在实际使用中居然撑了半年。我把它发给几个合作方,他们输入密码后正常访问,没人去扒拉源码。直到有天一个客户误操作,把密码框取消了三回,页面直接白屏,他才打电话问我“这页面是不是坏了”。我这才意识到问题——prompt框被取消时返回null,null不等于正确密码,于是被跳转走了,但用户根本没看到任何错误提示,体验烂得离谱。</p> <p>后来我改成了更友好的方式,用HTML表单加div遮罩。核心思路是:页面先默认显示一个登录界面,密码正确后用JavaScript隐藏登录层,显示真正的内容。代码大概是这样:</p> <pre><code> <div id="login" style="position:fixed;top:0;left:0;width:100%;height:100%;background:#fff;z-index:999;"> <input type="password" id="pwd" placeholder="输入密码"> <button onclick="check()">进入</button> </div> <div id="content" style="display:none;"> <h1>这里是受保护的内容</h1> </div> <script> function check() {  var input = document.getElementById("pwd").value; if (input === "mypassword123") {  document.getElementById("login").style.display = "none"; document.getElementById("content").style.display = "block"; } else {  alert("密码错误"); } } </script> </code></pre> <p>这个版本至少不会误伤取消操作的用户,密码错误也有明确提示。但安全性依然为零——只要在浏览器里把login的display改成none,或者直接把content的display改成block,照样能绕过。说白了,前端密码验证只是给君子看的锁,防不住小人。</p> <p>那么问题来了,这种html密码门到底有没有存在价值?我的判断是:有,但前提是你清楚它的定位。它适合用来挡普通访客,比如你临时分享一个链接给特定人群,不想让搜索引擎或路人直接看到内容。但如果你要保护的是真正的敏感数据,比如用户个人信息或商业机密,趁早用后端验证。前端做的所有事,都只是障眼法。</p> <p>记得有次我把这个密码页发给一个做运维的朋友,他看了一眼源代码,回了句“这玩意儿能防谁?”我说防你这种闲得慌的人。他笑了,说其实有个更骚的操作——把密码验证放在页面加载完成后,用fetch请求一个服务器接口来判断,接口返回对错。这样密码不在前端代码里,至少能防住那些只会看源码的新手。</p> <p>这个方法我后来试过,确实比纯前端强一点,但依然有硬伤——如果你把真正的页面内容也一次性返回给了浏览器,那别人通过查看网络请求或DOM结构,总能找到蛛丝马迹。除非你让服务器在密码正确后才返回真实内容,否则永远有漏洞。</p> <p>说到底,html输入密码进入页面,本质是个交互设计问题,不是安全问题。我最终留下的版本,密码框上方加了一行灰色小字:“本页面仅用于临时分享,请勿输入真实密码”。提醒自己,也提醒对方——别指望这扇门能挡住真正的贼,它只是让你在夜里睡得安稳一点罢了。</p> </body> </html> 

分享到: