Jag tänkte bara fråga vad man bör tänka på när man PHP:ar och sparar data till databas.
1. Ska man köra recplace på enkelfnutt till dubbelfnutt och såna saker eller är php okänslig mot såna sql-injections? Bör man vidta några säkerhetsåtgärder när man hämtar info från ett formulär och ska spara det i databas eller är php så pass säkert att det inte behövs?
2. Har någon tips eller rent av sitter på ett bra krypteringsscript? Jag vill helt enkelt ha ett script som mixar om alla tecken mellan a-z och 0-9 så att "a" görs om till "s" och "3" till "k" osv. helt slumpat. Alla bokstäver byter plats kort sagt. Inte världens bästa sätt, men det är bättre än inget alls :)
3. Om man vill att en användare ska registrera sig med sin epost som användarnamn. Vad bör man tänka på då? Någon som har ett smart sätt att validera sin adress via email? Det ser man ju ofta att man får en aktiverings-adress man ska gå in på. Hur är dessa uppbyggda? Finns det några sätt att kolla så att en epostadress är gilltig direkt med kanske javascript? Att den innehåller rätt tecken, @, punkt osv...
1. Ja du ska replacea fnuttar, dock inte med dubbelfnuttar utan med \'. Detta ska du dock bara göra om "magic_quotes_gpc" är avstängt.
2. inga större svårigheter egentligen.
$trans = array('a','b','c','d','e'); //osv... alla tecken du vill ersätta med något annat ska in här (CaSeSenSitiVe)
$trans2 = array('a','O','¤','C','L'); //osv.. alla ersättningar in här
$cryptedstring = str_replace($trans,$trans2,$string);
3. Aktiveringslänken utformar du lämpligen så att du skickar med ett id (eller ex. mailadressen) och en kontrollsumma (så att man inte kan aktivera kontot utan att ha fått mailet).
ex. https://www.server.se/actuser.php?userid=532&hash=ccdee241cdb0648e5c5e29a7842f5698
hashen bygger du upp genom att ex. köra mailadressen tillsammans med ett salt genom funktionen md5, dvs md5('sa#5sdk7eErts' . $mailadress);
/r Just ja, sen när besökarna klickar på aktiveringslänken så får du plocka fram mailadressen som hör till id-numret, kör mailadressen genom funktionen ovan och jämför det värdet med hashen som du fick i adressfältet. Stämmer dem kan du nog utgå från att de fått mailet och att du kan aktivera deras konto.
Är det klyftigt att använda de scripten om de inte funkar för åäö i adressen. Det kommer väl allt fler med svenska adresser nu? Men tack för länken :) Kanske går att bygga om lite och lägga till åäö..?
3. Ok, jag är kass på att förklara, men vi gör ett försök :D
Du använder md5 för att skapa en 32 tecken stor kontrollsumma (hash) för att verifiera att användaren verkligen har fått mailet. Hashen skulle kunna bestå av ex. mailadressen hashad (md5('slask@dec85.se')). Problemet är då bara att det skulle man kunna gissa sig fram till och då behöver man ju inte ange en riktig mailadress.
För att försvåra för folk att gissa sig fram till hur hashen byggs upp kan man använda sig av ett hemligt salt (i mitt fall valde jag 'sa#5sdk7eErts'). Detta salt lägger du till mailadressen innan du kör den genom md5-funktionen (md5('sa#5sdk7eErtsslask@dec85.se')). Att någon skulle lyckas gissa sig fram till den kontrollsumman är inte så troligt, vilket ju förhoppningsvis garanterar att användaren har fått mailet och använt sig av länken i mailet).
Ok, luddigt värre. Någon annan får gärna förklara :)
Är det klyftigt att använda de scripten om de inte funkar för åäö i adressen. Det kommer väl allt fler med svenska adresser nu? Men tack för länken Kanske går att bygga om lite och lägga till åäö..?
Är väl inte överdrivet många som använder de bokstäverna i mailadresser ännu, men inte heller adresser med en 4-tecken lång toppdomän fungerar (ex. .info).. Ja, det går att modifiera funktionerna för att även fungera med sådana mailadresser.
Det är även att rekommendera att du använder iteration enligt PKCS #5. Vilket betyder att du slumpmässigt antal gånger md5:ar samma lösenord om och om igen, vilket gör det svårare för användarna att lista ut hur många gånger hashen är hashar så att säga.
Angående aktiveringsmail så föreslår jag att göra på liknande sätt. Skicka ett epost med en länk där du skickar med dels epostadressen samt en verifieringshash.
om jag vill hämta artiklar på en sida men helst inte vill skriva ?id=123
kan jag då på liknande sätt fixa ett salt så det blir t ex ?id=kjHlKrBkbeuyU3fd där kjHlKrBkbeuyU3fd = 123 "hashad"? (detta var bara ett exempel såklart)
Eftersom mina poster automatiskt tilldelas id-nummer i databasen så kan jag inte hasha dem där väl..?
Det betyder att jag måste vara ute efter ett tvåvägs-krypt eller?
Jag vill kort sagt kunna ha en funktion som gör om mina atuomatiserade id-siffror i databasen till luriga teckenkombinationer som kommer att ses utåt...
Förslag? :)
Lösenord tänker jag hädanefter spara direkt med md5 och salt eller liknande iaf :)
Har php någon inbyggd två-vägs-krypterings-funktion? sökt runt och hittat nåt som heter mcrypt, men hade inte en susning om hur jag installerade det :(
annars, hur bygger jag en hyfsat fin två-vägs-kryptering själv? :) tack!
det ska egentligen bara vara för att man inte ska få rätta id-numret i querystringsen. går säkert att luska ut på nåt sätt iaf så det kanske inte är det säkraste men ändå. :)
Jag vet inte hur det är med andra databaser (antar att de flesta har det) men iaf. i mysql så kan man ju använda mysql´s inbyggda md5 funktion för att hasha ett värde, detta borde ju fungera även i en select-fråga, så att du då du skall skriva ut länkar till webbläsaren, ber att få id´t hashat redan då, och sedan när användaren väl klickar på länken, så får du använda dig utav en fråga typ
$query = "SELECT * FROM tabellen WHERE md5(id) = '" . $_GET['id'] . "'";
Detta är iofs. otestat, då jag inte vet på vilka sorters operationer md5 i mysql går att använda, men det är ju värt ett försök :)
/r: Redigerade koden lite efter att jag testat den, tänkte ju inte på att det itne bara var siffror längre, utan att man behövde fnuttar runt värdet. Men idén funkade faktiskt :)
i så fall. när jag lägger till en post så får den ju automatiskt ett värde. hur får jag sedan in detta i hash-kolumnen hashat?
går det att ordna direkt i samma inmatning eller måste jag köra en update där jag hämtar id-värdet så jag vet vad det faktiskt är och sedan sparar det hashat i hashkolumnen? :)
det borde gå att plocka fram aktuella postens tilldelade id direkt tycker man ju :)
16 tecken vs. 32 tecken tycker jag inte spelar så stor roll. Det är ju ändå inte så att folk kommer att skriva in adresserna manuellt...
Och som Pedda säger: Vad gör du om två stycken artiklar mot förmodan skulle ha samma 16 första tecken?
// Nippe
hehe slår lite på mig själv kanske.
men det hela handlar om en databas med artiklar och är inte 32 tecken lite långt för ett artikelnummer?
andra förslag på hur jag kan lösa det på ett bra sätt utan att dela ut rätta id't? smart att bara replacea 0-9 med typ 0=h, 1=5, 2=Z...osv? då behöver jag inte ens spara i ett hashfält. men det är ganska lätt att knäcka. kanske ska replacea med två tecken per id-siffra? 0=hX, 1=7H...osv? och för att få samma längd på alla så kollar man hur långt id't är och lägger till lite tecken? :) hehe
tackr!
280 ms totalt · 3 externa anrop · v20260731065814-full.767b4345