文档章节

防止浏览器记住用户名和密码

ForingY
 ForingY
发布于 2015/12/07 15:39
字数 1141
阅读 47
收藏 0

解决方案

下面列出了几个比较常用的解决方案,都有各自的优缺点,和不同的适用场景,先大概的看一下吧:

Ⅰ、 针对浏览器记住密码

首先大部分浏览器都是根据表单域的type="password"来判断密码域的,所以针对这种情况可以采取“动态设置密码域”的方法: 

代码如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <span style="font-family:Comic Sans MS;"><input type="text" name="password" onfocus="this.type='password'" /> </span>  


注:当这个文档框获取焦点时才将其变成密码域,这样浏览器就不会记住密码,当然为了更加完善,还可以把autocomplete="off"属性也加上。

Ⅱ、在 onload 事件,把密码框的值清空,即:

代码如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <span style="font-family:Comic Sans MS;"><script language="javascript">   

  2. window.load = function(){   

  3. document.getElementById('密码域ID').value='';   

  4. };   

  5. </script> </span>  

注:或者使用 jQuery 对应的方法。

Ⅲ、页面采用https协议,因为https是不会对表单进行保存信息的。

Ⅳ、采用flash做登录表单,这种情况浏览器也不会记录表单信息。

Ⅴ、再来个变态的好了,就是可以把 type="password" 改成 type="text",因为 type 不是 password 就不会出现记住密码功能,然后设置一个变量如:var val="" 或者是设置一个隐藏域 <input type="hidden" name="val">,最后用 onpropertychange 把密码换成一行圆点,并把值赋给 val,提交时再把 val 的值还原回去,由于效果和 * 号一样,用户是看不出来的。 

对比

那么,问题来了,如果项目已经开发结束,并且正在进行测试阶段,遇到这样的问题之后,那么你不可能再去重构代码了,而是所谓的打补丁,通过补丁来解决这个漏洞。那么,可用的方案就是 I 和 Ⅱ了,当然,如果你不怕麻烦,那么推荐使用 Ⅳ 和 Ⅴ了。

第 Ⅲ 种方案肯定是不行的,因为项目中的协议已经在开发结束的时候就确定了,如果事先留有接口的话,那就容易的多了。不过,这需要一个好的设计才能实现。

当你选择第Ⅰ种方案的时候,你会发现,其实还是有问题的,因为我在做的时候,就已经测试过了,第 Ⅰ 种方案在 IE 10 及以上版本都不会有问题,但在 IE 10 以下的版本就出现了明文,this.type='password' 完全不起作用。如果你的项目中需要 IE 多个版本的兼容性的话,这种方案就被 pass 了。

而至于第Ⅱ种方案,通过测试你就会发现,其实它的作用是锦上添花,搭配第Ⅰ种方案一起使用还是可以的,不过第Ⅰ种方案已经被 pass 了,仅仅使用第Ⅱ种方案也只是治标不治本,所以,一样 pass 。

如果项目在开发中,那么第Ⅲ种、第Ⅳ种方案可以尝试一下。

而我选择的解决方案,则是使用第Ⅴ种,这种方式是使用 JS 实现的,通过文本框获得焦点后,把文本框进行替换成密码框,这种方式在各版本的 IE 中都是可以做到的。而且,如果您的项目正在开发的阶段,那么,我推荐您使用这种方式,在以后的维护中,也不会有后顾之忧的。

至于代码嘛,这里就不贴了,都不难,而且网上也都有。如果有需要的可以私信给我,我会把代码发给您。

结束语

对于整个 Web 安全体系中,这个漏洞并不算是致命的,这里提一下也只是让大家有个认识,补漏洞不是我们的目的,重要的是如何在开发中避免出现这样的漏洞,所谓“防患于未然”,就是这个道理。


© 著作权归作者所有

ForingY
粉丝 23
博文 272
码字总数 156129
作品 0
杭州
程序员
私信 提问
软件测试面试之如何测试网页的登录页面

软件测试面试之如何测试网页的登录页面 具体需求: 有一个登陆页面, 上面有2个textbox, 一个提交按钮。 请针对这个页面设计30个以上的test case。 此题的考察目的: 面试者是否熟悉各种测试...

zq张蔷
2017/05/03
0
0
如何测试网页的登录页面

这个面试题碰到过很多次, 再次总结下来。 具体需求: 有一个登陆页面, 上面有2个textbox, 一个提交按钮。 请针对这个页面设计30个以上的test case. 此题的考察目的: 面试者是否熟悉各种测...

oanyt
2015/07/08
0
0
测试用例设计-web登录测试

页面描述 web登录页面:有两个文本框,一个提交按钮(注册、忘记密码等按钮) 用例设计 【功能测试(Function test) 0.什么都不输入,点击提交按钮,看提示信息。(非空检查) 1.输入正确的用户...

iBazinga
2016/09/22
530
0
浏览器记住用户名密码后是如何填充数据的呢?

在开发时遇到了一些问题,每次登陆时浏览器会提示记住用户名密码,然而记住以后我再次打开页面进行登陆时用户名填充的位置不对??不知道有没有大神了解这浏览器是根据什么来进行填充用户名的...

wqqueenie
2016/08/30
331
3
shiro记住我功能实现,web界面账号密码如何自动填充?

大家好我使用shiro实现了记住密码的功能,生成了cookie(加密)在浏览器端,请问: 该怎么实现浏览器端用户名密码自动填充呢?就是大多数网站那样,记住密码后账号密码都是自动填充的?...

樱木花道VS康
2018/07/05
691
1

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部