Avatar billede sunnyboy_55 Nybegynder
30. august 2011 - 17:14 Der 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>

<input type="text" name="bruger" id="woot" size="30" />
<input type="text" name="password" id="woot2" />
mvh. S
Avatar billede olebole Juniormester
30. august 2011 - 18:01 #1
<ole>

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  =)

/mvh
</bole>
Avatar billede sunnyboy_55 Nybegynder
30. august 2011 - 18:08 #2
koden er jo i mit indlæg?
Avatar billede olebole Juniormester
30. august 2011 - 18:19 #3
Nej, det er en lillebitte del af koden, som intet siger nogen af os andre
Avatar billede olebole Juniormester
30. august 2011 - 18:24 #4
- 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
Avatar billede sunnyboy_55 Nybegynder
30. august 2011 - 18:26 #5
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
}
}
}

rememberForm.prototype.addtoggle=function(attr){
this.togglebox=this.getfield(attr)
}

//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)
}
Avatar billede olebole Juniormester
30. august 2011 - 18:35 #6
Har du overvejet sikkerhedsrisikoen?

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)?
Avatar billede olebole Juniormester
30. august 2011 - 18:39 #7
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
Avatar billede sunnyboy_55 Nybegynder
30. august 2011 - 18:46 #8
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
Avatar billede olebole Juniormester
30. august 2011 - 18:52 #9
Selvtak. Jeg samler ikke points, så læg selv et svar og accepter det, så tråden lukkes. Men tak for tilbudet  =)
Avatar billede sunnyboy_55 Nybegynder
30. august 2011 - 18:56 #10
ok, det er hermed gjort. igen tak.
Avatar billede olebole Juniormester
30. august 2011 - 19:10 #11
Jeg har i øvrigt lige for en sikkerheds skyld testet min påstand, at JS ikke kan aflæse et password-felt. Den holdt forbløffende nok ikke!  =8-O

Dette virker faktisk, hvad enten du sætter værdien ved at skrive i feltet, eller gør det med java script:


<script type="text/javascript">
function foo() {
    alert(document.getElementById("bar").value);
}
function fooBar() {
    document.getElementById("bar").value = "OleBole";
}
</script>

<p><input id="bar" type="password">
    <button onclick="fooBar()">Sæt værdi</button>
    <button onclick="foo()">Læs værdi</button></p>


Men jeg kan som sagt absolut ikke anbefale fremgangsmåden  =)
Avatar billede sunnyboy_55 Nybegynder
30. august 2011 - 19:53 #12
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester