Hej Flash Forum
Nu har jeg fået taget mig sammen til at begynde at lave noget i Flex
Til at starte med vil jeg bare lave et simpelt loginsystem med mxml og amfphp.
Men.. det driller lidt.
Jeg har dette PHP script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <?php /** * Simpelt login System * -Jakob Halskov */ class Login { /** * This service checks if the user have entered the correct password for hes or shes user * @returns true or false */ function __construct() { mysql_connect("localhost","root","root"); mysql_select_db("sporty"); } function tryToLogin($username,$password) { $hashedPassword = sha1($password); $query ="SELECT *"; $query .="FROM users "; $query .="WHERE username= '{$username}' "; $query .="AND encryptedPassword = '{$hashedPassword}' "; $query .= "LIMIT 1"; $result_set = mysql_query($query); if(!$result_set){ die("Database query failed: " . mysql_error()); } if(mysql_num_rows($result_set)!=0) { return "OK"; }else{ return "ERROR"; } } } ?> |
Og når jeg tester dette i amfphp browseren fungere det perfekt!
Men når jeg skal til at lave flex delen går det galt..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <?xml version="1.0" encoding="utf-8"?> <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" width="284" height="256" title="Login" layout="absolute" horizontalAlign="left"> <mx:RemoteObject id="myservice" fault="faultHandler(event)" showBusyCursor="true" source="sporty.Login" destination="amfphp"> <mx:method name="tryToLogin" result="resultHandler(event)" > <mx:arguments> <arg1>userInput.text</arg1> <arg2>passInput.text</arg2> </mx:arguments> </mx:method> </mx:RemoteObject> <mx:Script> <![CDATA[ import mx.managers.CursorManager; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; private function faultHandler(fault:FaultEvent):void { CursorManager.removeBusyCursor(); resultTXT.text = "code:\n" + fault.fault.faultCode + "\n\nMessage:\n" + fault.fault.faultString + "\n\nDetail:\n" + fault.fault.faultDetail; } private function resultHandler(evt:ResultEvent):void { resultTXT.text = evt.result.toString() // same as: evt.result.toString(); } private function sendLoginRequest():void { myservice.getOperation('tryToLogin').send(); } ]]> </mx:Script> <mx:Button label="Login" id="loginButton" x="16" y="87" click="sendLoginRequest()" /> <mx:Label x="16" y="27" text="Username:" width="78"/> <mx:Label x="16" y="53" text="Password:" width="78"/> <mx:TextInput x="84" y="25" id="userInput"/> <mx:TextInput x="84" y="53" id="passInput" displayAsPassword="true"/> <mx:Label x="16" y="117" text="Label" width="238" height="89" id="resultTXT"/> </mx:Panel> |
Når jeg taster informationerne ind og trykker login.. får jeg bare "ERROR" (som jeg selv har lavet i php) som er det jeg retunere i php'en hvis koden ikke er korrekt.
Er der nogle kvikke hoveder som kan spotte hvor det går galt?
-Jakob Halskov
Flex newbie xD
8 kommentarer
Hej igen.
Efter at have traced debuggede søgt på nettet har jeg fundet fejlen.
der skulle være { } rundt om mine argumenter:
Men jeg vender sikker tilbage med flere problemer
-Jakob
Flex newbie
Har du prøvet at returne dine variable i php scriptet, ala:
return $username; - gør dette før du gør noget andet i dit php script, hvis du ikke får noget tilbage i dit resultTXT txtfield er det fordi du ikke for sendt dine variable fra flex korrekt.
Prøv istedet for arguments tagget at sende dine variable direkte når du kalder send() functionen på din service, så det ser sådan ud istedet:
myservice.tryToLogin.send(userInput.text, passInput.text);Håber det hjælper
Og et lille tip til dit login script for ekstra sikkerhed: Du bør bruge et salt når du opretter og tjekker passwords, og evt. også en stærke krypteringsalgoritme end sha1, læs mere her: http://phpsec.org/articles/2005/password-hashing.html - under overskriften "Making it better" i bunden af siden.
/Lasse
Ok, tak det kigger jeg på
OK, men jeg kan ikke helt forstå det "salt"
er det:
man "hasher" sit pass og der efter tilføjer en random streng?
Hvordan tjekker man så når brugeren logger ind om det er det rigtige password?
-Jakob
Skal man så have en extra kollone i sin MySql database der holder "saltet"?
Eller evt et link til en tutorial med en samlet kode php..
Ved oprettelse af en brugers password gør du følgende:
Brugerens password (det han inputter i textfield ved oprettelse) tilføjer du en random tekst til på fx. længden 9.
Sådan at passwordet bliver: salt + password.
så krypterer du passwordet via fx sha512(salt + password) - gem dette i din hashed password kolonne i databasen.
saltet gemmer du i en kolonne for sig selv i din database, ukrypteret.
Når du vil verificere et login tager du så igen det brugerangivne password fra login boksen, tilføjer dit salt foran passwordet, og kører sha512() på denne string. Herefter ser du om resultatet af sha512() matcher det password du har gemt i din hashed password kolonne.
Fordelen ved dette er at en hacker ved cracking/brute force attack skal genere et nyt dictionary for hver brugers password i din database.
Håber det opklarede lidt
Ok.. tak det kigger jeg på..
Jeg vender tilbage hvis jeg får problemer
-Jakob