30. august 2011 - 17:14Der er
11 kommentarer og 1 løsning
Huskefunktion med password
Hej Eksperter Jeg har nedenstående huskefunktion til bruger og password, og det fungere egentlig udmærket, men kun så længe at formular feltet "password" er type=text. Ændres feltet til password virker huskefunktionen ikke, er det muligt at ændre dette script, så feltet kan blive type=password og dermed skjule kodeordet for andre som kigger en over skulderen:-)
<script type="text/javascript"> //<![CDATA[ var f1=new rememberForm("demoform") //create instance of script referencing form "demoform" f1.persistfields("woot", "woot2") //specify the text fields "woot" and "woot2" to be remembered f1.addtoggle("persistbox") //specify the checkbox "persistbox" as the " toggle box". (optional). //]]> </script>
Det svarer lidt til at skulle diagnostisere en person udfra et billede af hans snørrebånd. Det er umuligt at svare dig uden at kunne se koden, du bruger =)
- men generelt kan man sige, at JavaScript (heldigvis) ikke kan hente værdien af et password-felt, så det er usandsynligt, du vil kunne få det til at virke på sådan et felt.
Derudover er det jo et enormt sikkerhedshul at gemme passwords i klartekst på PC'en
Ja, du har ret, min fejl, beklager:-) resten af koden, som jeg vist har fundet her på experten, er gemt i en js-fil og se sådan her ud:
function getCookie(Name){ var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair if (document.cookie.match(re)) //if cookie found return document.cookie.match(re)[0].split("=")[1] //return its value return "" }
function setCookie(name, value, days){ var expireDate = new Date() //set "expstring" to either future or past date, to set or delete cookie, respectively var expstring=expireDate.setDate(expireDate.getDate()+parseInt(days)) document.cookie = name+"="+value+"; expires="+expireDate.toGMTString()+"; path=/"; }
function rememberForm(formid){ //Main remember form values object this.formref=document.getElementById(formid)? document.getElementById(formid) : document.forms[formid] this.cookiename=formid this.persistdays=180 //days to persist form values this.fields=new Array() this.cookiestr="" var forminstance=this rememberForm.dotask(this.formref, function(){forminstance.savevalues()}, "submit") //save form values onsubmit rememberForm.dotask(window, function(){forminstance.recallvalues()}, "load") //populate form with saved values onload (body) }
rememberForm.prototype.getfield=function(attr){ //get form field based on its ID or name attribute var fieldref=document.getElementById(attr)? document.getElementById(attr) : this.formref[attr] return fieldref }
rememberForm.prototype.persistfields=function(){ //get form fields to persist values for for (var i=0; i<arguments.length; i++){ this.fields[i]=this.getfield(arguments[i]) this.fields[i].fname=arguments[i] //store name or id of field in custom property } }
rememberForm.prototype.savevalues=function(){ //get form values and store in cookie for (var i=0; i<this.fields.length; i++){ if (this.fields[i].type=="text") this.cookiestr+=this.fields[i].fname+":"+escape(this.fields[i].value)+"#" } if (typeof this.togglebox!="undefined"){ //if "remember values checkbox" is defined this.persistdays=(this.togglebox.checked)? this.persistdays : -1 //decide whether to save form values this.cookiestr=(this.togglebox.checked)? this.cookiestr+"toggleboxid:on;" : this.cookiestr } else //if checkbox isn't defined, just remove final "#" from cookie string this.cookiestr=this.cookiestr.substr(0, this.cookiestr.length-1)+";" setCookie(this.cookiename, this.cookiestr, this.persistdays) }
rememberForm.prototype.recallvalues=function(){ //populate form with saved values var cookievalue=getCookie(this.cookiename) if (cookievalue!=""){ //parse cookie, where cookie looks like: field1:value1#field2:value2... var cookievaluepair=cookievalue.split("#") for (var i=0; i<cookievaluepair.length; i++){ if (cookievaluepair[i].split(":")[0]!="toggleboxid" && this.getfield(cookievaluepair[i].split(":")[0]).type=="text") this.getfield(cookievaluepair[i].split(":")[0]).value=unescape(cookievaluepair[i].split(":")[1]) else //else if name in name/value pair is "toggleboxid" this.togglebox.checked=true } } }
//Call this function if you wish to clear the user's cookie of any saved values for this form instantly rememberForm.prototype.clearcookie=function(){ setCookie(this.cookiename, "", -1) }
rememberForm.dotask=function(target, functionref, tasktype){ var tasktype=(window.addEventListener)? tasktype : "on"+tasktype if (target.addEventListener) target.addEventListener(tasktype, functionref, false) else if (target.attachEvent) target.attachEvent(tasktype, functionref) }
I forvejen er det kun de allermest IT-ukyndige, som bruger PC'ens allerede indbyggede features til autoudfyldelse af passwords. En gammel amatørkode gør blot risikoen endnu større - og hvorfor, når nu dine brugeres PC allerede har en sådan feature (med langt større sikkerhed)?
Hvis du går fra din PC, ville det tage mig under et minut at finde dit password i urypteret form - og fik jeg en bagdør installeret på din PC, ville dine cookies være det første, jeg ville uploade ... og dermed dit ukrypterede brugernavn og password med tilknyttet URL.
Bortset fra det er en løsning som sagt ikke mulig, da JS ikke kan aflæse et password-felt. JS kan kun hente det, du læser: En række stjerner
Tak for svar, og du har givet mig stof til eftertanke. Det er jo egentlig godt nok, at løsningen ikke er muligt, nu det er et sikkerhedsspørgsmål. Tak for kurset, smid et svar:-) Fortsat god sommer. Mvh. S
Ja tak, men jeg følger dit råd, dropper funktionen og lader brugernes egne pc klare den side af sagen. Det er nok det bedste, men tak alligevel.
Mvh. S
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.