细节中的安全:基于表单防止密码星号查看器的脚本

  • 发布于:2019-10-06
  • 213 人围观

大家可能在填写完用户名或者密码时因为某种原因未登录而离开,这时大家可能因为密码框的星号而麻痹大意:以为密码不会被窥视,而放心离开。但是有一种软件可以直接查看星号隐藏下的密码原文,这就带来些安全隐患。不过本脚本可以让你的表单的密码区躲开密码星号查看软件的查看。

原理:生成一个ID为随机的隐藏Input,通过onkeyup事件实时捕获按键,并且复制到这个隐藏的Input里,同时将原密码区的值以“*”号替换掉。发送表单时,将隐藏Input的密码原文复制到原密码区并且销毁这个ID随机的隐藏Input。

下面注解如果在描述上有什么不妥欢迎提出

代码:

/*
基于表单防止星号查看器的脚本
作者:oror@Blueidea
邮箱:pcn88#hotmail.com
网站:www.wyev.com
*/
var aKey=new Array();
//用于保存随机隐藏Input的ID值
var aPrt=new Array();
//用于保存所有受保护Input的name值
var szFrm;
//用于保存表单名
frmProt={

/*
获得ID对应对象
szID:[字符串]对象ID属性
*/
$:function (szID){

return document.getElementById(szID);

},
/*
获得表单域对象
szFrmName:[字符串]表单的name值
*/
$v:function (szFrmName){

return document.forms[szFrmName];

},
/*
获得表单域的Input标签对象
szName:[字符串]标签的name值
szFrmName:[字符串]表单的name值
*/
$f:function (szName,szFrmName){

return frmProt.$v(szFrmName).elements[szName];

},
/*
绑定事件
obj:[OBJECT]对象
evn:[字符串]事件名称
f:函数
*/
fAttach:function (obj,evn,f){

if(!obj)return ;
if(obj.attachEvent){

obj.attachEvent("on" evn,f);

}
if(obj.addEventListener){

obj.addEventListener(evn,f,false);

}

},
/*
获得随机数字
dwIn:[数字]随机范围
*/
fRand:function (dwIn){

return Math.floor(Math.random()*dwIn);

},
/*
获得随机字母与数字组合
dwLen:[数字]返回值长度
*/
fRandom:function (dwLen){

var dwDx,szResult="",szTmp;
var aMySd=new Array();
//建立数组用于保存随机字符,这里分成3组
aMySd[0]="abcdefghijklmnopqrstuvwxyz";
//第一组[0]:小写字母
aMySd[1]="0987654321";
//第二组[1]:数字
aMySd[2]=aMySd[0].toUpperCase();
//第三组[2]:大写字母
for(var i=0;i<dwLen;i ){
//依长度循环
dwDx=frmProt.fRand(3);
//获得一个随机数,范围0~2
szTmp=aMySd[dwDx];
//取出一组
szResult =szTmp.substr(frmProt.fRand(szTmp.length),1);
//随机取出这一组中某个字符

}
return szResult;

},
/*
建立标签函数
szTarget:[字符串]父标签。生成的新标签将置于其中
szType:[字符串]要生成的标签类型
aProp:[数组]属性设置,如 Array("type=text","size=20")
*/
fCreateTarget:function (szTarget,szType,aProp){

var aTmp;
var objLocation=frmProt.$v(szTarget);
//获得父标签对象
var objPreCreate=document.createElement(szType);
//初始标签
for(var i=0;i<aProp.length;i ){
//设置属性循环开始
aTmp=aProp[i].split("=");
//按=号分开
if(aTmp.length<2){
//注意为避免设置错误,这里做个判断
alert("错误的属性值设定");
return ;

}
objPreCreate.setAttribute(aTmp[0],aTmp[1]);
//设置属性

}
objLocation.appendChild(objPreCreate);
//建立这个标签

},
/*
销毁标签
szTarget:[字符串]要销毁标签的父标签
szID:[字符串]要销毁标签ID
*/
fRemoveTarget:function (szTarget,szID){

var objLocation=frmProt.$v(szTarget);
//获得父标签对象
objLocation.removeChild(frmProt.$(szID));

},
/*
创建隐藏Input标签
szBase:[字符串]父标签。生成的Input标签将置于其中
szName:[字符串]Input标签的name属性
*/
fCreateHidden:function (szBase,szName){

var aHide=new Array("type=hidden","id=" szName,"value=");
//设置属性
frmProt.fCreateTarget(szBase,"input",aHide);
//调用fCreateTarget创建

},
/*获得event事件,主要为了兼容FireFox浏览器*/
fGetEvent:function (){

var objCaller=frmProt.fGetEvent.caller;
var objEvent,objResult=null;
while(objCaller!=null)
{

万企互联
标签: