bassebhuMedlem sedan nov. 20016 480 inlägg Hej alla glada!
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...
Tack för svar :)
PeeerMedlem sedan mars 20025 907 inlägg 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.
bassebhuMedlem sedan nov. 20016 480 inlägg 1. har ingen aning om magic qoutes är avstängt. hmm. kan kollas i php-ini eller går det att kolla med php-kod, det vore enklare i så fall..? :)
2. tackar. ska kolla på den...
3. kan du förklara lite mer eller tipsa om vart jag kan läsa om md5? md5('sa#5sdk7eErts' ser rätt självihopplockad ut hehe..?
tronez skrev:
3.
Scriptarkivet
Ä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 åäö..?
PeeerMedlem sedan mars 20025 907 inlägg 1.
if(get_magic_quotes_gpc())
echo 'Magic :O';
else
echo 'O-magic';
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.
BrimbaMedlem sedan dec. 19995 875 inlägg Hej!
Mitt tips är att läsa (Problem med hashfunktioner) http://www.swesecure.com/?ID=ee61e315-01fa-40f5-970e-5fa642893452&IID=b295b0f0-22c7-4061-acf7-f8db6dbdeccc
Som tar upp nuvarande och kommande problem med hashfunktioner såsom md5.
i övrigt håller jag med om att du kan skydda dina lösenord med ett salt, men det är inte dumt att förutom använda ett systemsalt även använda ett användarsalt som är slumpgenererat per användare. Läs mer här http://www.swesecure.com/?ID=683ede3d-d472-459a-a841-14a95f58c891&IID=8ac9010e-9acd-41e0-9ad0-c8ee07d69d0f
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.
Lycka till!
bassebhuMedlem sedan nov. 20016 480 inlägg okej, shyrre :) jag börjar fatta :)
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 :)
Tack.
bassebhuMedlem sedan nov. 20016 480 inlägg Ingen som har tips på min senaste fråga..?
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å. :)
Patrik81Medlem sedan okt. 2001538 inlägg Hej :)
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 :)
MVH Patrik
lunne82Medlem sedan dec. 2003153 inlägg
bassebhu skrev:
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?
förutom kolumnen id i tabellen skapar du en kolumn "hash" eller liknande som innehåller den strängen. Då behöver du aldrig använda ditt ID utåt.
bassebhuMedlem sedan nov. 20016 480 inlägg hmm, väldigt intressant :) tack, måste testa. det borde ju funka askalas :)
bassebhuMedlem sedan nov. 20016 480 inlägg 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 :)
tack!
bassebhuMedlem sedan nov. 20016 480 inlägg shyrre, måste jag testa :) men den ser inte ut att kunna sätta det direkt i inserten. det betyder att jag i så fall får köra en update ändå efter.
men jag har visserligen inte testat det än så det kanske funkar. återkommer :)
bassebhuMedlem sedan nov. 20016 480 inlägg genereras alltid 32 siffror med hashen/md5? det är iofs ganska långt om man ska ha ?id=686ghjsuGUHJ8UTG...osv..32 siffror =/
PeddaMedlem sedan juni 20006 032 inlägg
bassebhu skrev:
genereras alltid 32 siffror med hashen/md5? det är iofs ganska långt om man ska ha ?id=686ghjsuGUHJ8UTG...osv..32 siffror =/
Ja, det är alltid 32 tecken.
bassebhuMedlem sedan nov. 20016 480 inlägg ok. kommer få grimmt långa adresser då, men jag har lyckats lösa det kodmässigt iaf :)
tror ni att det skulle funka att kapa ner strängen till hälften när man skickar ut ?id=hashid...
och sedan när man jämför så kapar man halva också. Jag menar hur stor är sannolikheten att 16 första siffrorna är samma i två poster?
Även om jag skulle få ihop 500 000 poster i databasen.
men frågar ändå. är det en väldigt dum idé?
PeddaMedlem sedan juni 20006 032 inlägg Sannolikheten är kanske inte så stor, men det kan ju trots allt hända och vad gör du då?
nkrantzMedlem sedan apr. 2002830 inlägg 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
bassebhuMedlem sedan nov. 20016 480 inlägg
nkrantz skrev:
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!