Avatar billede sesso Nybegynder
18. november 2007 - 13:26 Der er 8 kommentarer og
1 løsning

Login (post og get), samt sikkerhed

Hej,
jeg sidder lige og roder med et login system der kalder en javascript funktion når der bliver trykket på submit knappen. Den funktion tager så værdierne fra bruger- og kodeord felterne og sender dem til et php dokument, der tjekker om de står overens med en bruger i databasen, og hvis de gør det, bliver der udskrevet et ét-tal som så bliver modtaget af javascript funktionen (get-metoden) og så bliver brugeren ellers gjort opmærksom på at han er logget ind.
Problemet er bare det at lige nu sender jeg bruger og kodeord værdierne i url'n som parametre, da jeg bruger get-metoden så jeg kan få fat i det der bliver udskrevet af php-dokumentet. Det er bare ikke så godt, da der så ikke er noget særligt sikkert over det! Det jeg så tænkte var; jamen, kan man ikke kryptere det? Er der nogen god måde at gøre det på? En anden løsning er at sende det med post-metoden. Men så er det ikke muligt at modtage det dokumentet udskriver - eller har jeg misforstået noget? For det ville være smart at kunne sende det med post metoden og derefter modtage det dokumentet udskriver, for så løser det også et andet problem der lyder at jeg kan komme ud for, at der skal sendes tekst på over 2000 tegn, og det går jo ikke med get metoden. Men problemet er, at når de tegn er sendt, skal jeg modtage det dokumentet der modtog tegnene, udskriver.

Nogen der har en eller et par løsninger?
Avatar billede sesso Nybegynder
18. november 2007 - 13:27 #1
Det skal lige siges at vi snakker om XMLHttpRequest's:)
Avatar billede w13 Novice
18. november 2007 - 13:52 #2
Prøv med følgende POST-kode:
-----------------------------------------------------------
<html>
<head>
<script type="text/javascript">
    var req=false;
    function AjaxLoad(url,parameters,obj){
        req=false;
        if(window.XMLHttpRequest){
            req=new XMLHttpRequest();
        }
        else if(window.ActiveXObject){
            try{req=new ActiveXObject("Msxml2.XMLHTTP");}
            catch(e){
                try{req=new ActiveXObject("Microsoft.XMLHTTP");}
                catch (e){}
            }
        }
        if(req.overrideMimeType) req.overrideMimeType("text/xml");
        if(!req){alert('Cannot create XMLHTTP instance');return false;}
        req.onreadystatechange=function(){if(req.readyState==4&&req.status==200){
            alert(req.responseXML.getElementsByTagName("output")[0].firstChild.firstChild.nodeValue);
        }};
        req.open('POST',url,true);
        req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        req.setRequestHeader("Content-length",parameters.length);
        req.setRequestHeader("Connection","close");
        req.send(parameters);
    }
    function FormSubmit(form){
        var sParameters;
        for(i=0;i<form.elements.length;i++){
            var elm=form.elements[i];
            if(elm.getAttribute("name")) sParameters+="&"+elm.getAttribute("name")+"="+encodeURI(elm.value);
        }
        AjaxLoad(form.getAttribute("action"),sParameters.substring(1,sParameters.length));
    }
</script>
</head>
<body>

<form method="post">
<input name="username"><br>
<input name="password"><br>
<input type="submit" value="Submit" onclick="FormSubmit(this.form);return false">
</form>

</body>
</html>
Avatar billede w13 Novice
18. november 2007 - 13:53 #3
Bemærk dog her, at der kommunikeres med en XML-fil, hvilket det bør være frem for blot en tekst eller HTML-fil. Sig til, hvis du har brug for hjælp til den.
Avatar billede w13 Novice
18. november 2007 - 14:09 #4
Hov, formen skal også have en action="side.php" som er den side, du kalder med Ajax'en.
Avatar billede sesso Nybegynder
18. november 2007 - 14:11 #5
Først og fremmest; hvorfor bør der udelukkende kommunikeres med xml-dokumenter og ikke ren-tekst filer. Jeg kan komme på eksempler, hvor siden hurtigere executes hvis det er ren tekst, end hvis det er xml. Bør det så ikke være ren tekst der skal bruges i sådanne tilfælde?

Jeg har ydermere lige fundes ud af at selvom man sender med post-metoden, så kan man stadig modtage det dokumentet udskriver. Men jeg har lidt spørgsmål til dit eksempel og noget du vidst ikke har svaret på...

Hvorfor bruge window.XMLHttpRequest og ikke document?
Er det nogen smart måde at kryptere indholdet på, så folk med f.eks. firebug ikke kan se hvad der bliver sendt mellem klienten og severen? Eller er det noget helt andet end kryptering der skal bruges?
Avatar billede sesso Nybegynder
18. november 2007 - 15:47 #6
Jeg har også lige opdaget at når jeg sender materialet med post-metoden, så forstår den ikke æøå ... allerede har jeg løst problemet tidligere, hvor jeg indsætte header('Content-Type: text/html; charset=ISO-8859-1'); i php-dokumentet. Men det ser ikke ud til at klare det, når jeg bruger post-metoden.

Jeg laver en XMLHttpRequest således, hvor xmlHttp indholde hvilken request metode browseren nu kan håndtere:

xmlHttp.onreadystatechange = function () {
// noget kode der skal executes
};
xmlHttp.open('post', 'URL_DER_SKAL_SENDES_TIL', true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send(TING_DER_SKAL_SENDES_MED);

jeg ved ikke om det er der i der skal laves noget, så den kan håndtere æøå?
Avatar billede w13 Novice
18. november 2007 - 17:46 #7
Der er jo en grund til, at det hedder XMLHttpRequest og ikke HTMLHttpRequest. Det er ikke beregnet til at læse ren tekst eller HTML, og det er derfor ikke hensigtsmæssigt at bruge en af disse. Man rådes til enten at overføre data med XML eller JSON (som der er skrevet en artikel om i JavaScript-kategorien). Jeg kan ikke give dig en bedre forklaring, da "Ajax" også er rimelig nyt for mig.

Jeg bruger følgende kode i filen xml.asp, som jeg henter med Ajax:
-------------------------------------------------------------------
<%Response.ContentType="text/xml"%><?xml version="1.0" encoding="iso-8859-1" ?>
<data xml:lang="da">
    <output><span id="frugt">Æble</span></output>
</data>
-------------------------------------------------------------------
Og det fungerer helt fint. "Æble" bliver returneret uden problemer.
Avatar billede w13 Novice
18. november 2007 - 17:48 #8
Jeg glemte i øvrigt at rette:
    function AjaxLoad(url,parameters,obj){
til:
    function AjaxLoad(url,parameters){
Avatar billede w13 Novice
18. november 2007 - 21:48 #9
Hvis du stadig prøver med text frem for xml, bør du heller ikke have linjen:
        if(req.overrideMimeType) req.overrideMimeType("text/xml");
Ved ikke, om den ligefrem kan ødelægge tegnsættet, men den er i hvert fald ikke god, hvis du insisterer på text.
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

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