Kom ihåg mig?
Home Menu

Menu


Bästa sättet att säkra PHP-MySQL

Ämnesverktyg Visningsalternativ
Oläst 2003-10-01, 01:26 #1
Max Max är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2003
Inlägg: 721
Max Max är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2003
Inlägg: 721
Vad skulle ni säga bästa sättet att säkra koppling mellan PHP och en MySQL databas är?

1) Jag tänker dels på själva databasen/MySQL, typ sätta lösenord på root etc.
Jag har följt dessa steg http://www.analysisandsolutions.com/code/m...sic.htm#tighten men finns det något ytterligare man bör tänka på?

2) Specifikt hur gömmer man kopplingen till databasen i PHP.
Ett sätt är ju att lägga lösenord, databasnamn etc. i en include-fil, men hur skyddar man den effektivt. Jag tycker också att det känns lite olustigt att lägga ett lösenord i klartext, kan man kryptera det på något sätt (mao accepterar MySQL ngn form av krypterat lösenord).

Tacksam för alla kunskaper kring detta jag kan få ta del av.

Mvh Max

Ps: Jag använder en Win2k server.
Max är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-10-01, 16:21 #2
nomicon nomicon är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Aug 2003
Inlägg: 753
nomicon nomicon är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Aug 2003
Inlägg: 753
Hejsan.

Se ALLTID, ALLTID till att kolla datan som kommer från klienterna, dvs via htmlforumlär. Om dom ska ange ett postnummer så sak det inte finnas annat än siffror från det fältet, samma med förnamn, ska inte komma med skräptecken där såsom ',%@#"¤$€"!# osv, endast a-zA-Z, ej heller siffror.

Lagra uppkopplingssträngen samt databasnamn,login,lösenord i en includefil precis som du säger, som ligger utanför din hemsidas katalog. Dvs om din hemsida ligger i
/www/minsida så lägger du med fördel den filen i /www

Se till att ange full sökvägar till allt som körs i include() / include_once()

Läs mera om mysql_escape_string
nomicon är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-10-01, 19:22 #3
orreborres avatar
orreborre orreborre är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2003
Inlägg: 309
orreborre orreborre är inte uppkopplad
Flitig postare
orreborres avatar
 
Reg.datum: Apr 2003
Inlägg: 309
nomicon: Jag vet inte om jag missuppfattar dig nu, men Max bör lägga anvnamn och lösenordsfilen till databasen UTANFÖR www-roten. Jag uppfattade ditt inlägg som om han skulle lägga den i www-roten. Detta för att då ingen kan skriva en sökväg för att komma till denna fil. Men om du menade så kan du bortse från det jag skrev...

Annars är det som nomicon säger, kontrollera allt du ska lägga in/söka efter i databasen om användaren får fylla i textfält vid t.ex. registrering/sökning.
orreborre är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-10-03, 02:47 #4
nomicon nomicon är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Aug 2003
Inlägg: 753
nomicon nomicon är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Aug 2003
Inlägg: 753
Tja.

Självklart menar jag att det skall ligga på en del av filsystemet som INTE kan läsas av den användare / grupp som kör Webbservern.

Martin
nomicon är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-10-03, 13:05 #5
Max Max är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2003
Inlägg: 721
Max Max är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2003
Inlägg: 721
Tack för svaren. Då verkar jag ha gjort rätt hittills utom i ett avseende: den strikta kontrollen av inmatat data. Varför är det nödvändigt? Är det för att någon annars skulle kunna lägga in data som modifierar SQL-uttrycket jag skickar till servern?
Max är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-10-03, 13:26 #6
melin melin är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2003
Inlägg: 1 396
melin melin är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2003
Inlägg: 1 396
extra säkerhet kan man också lägga genom att kontrollera varifrån datan skickas..

Jag har haft mycket kul på en del websidor genom att tillverka egna formulär och skicka data till deras php/asp script...
melin är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-10-03, 19:13 #7
orreborres avatar
orreborre orreborre är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2003
Inlägg: 309
orreborre orreborre är inte uppkopplad
Flitig postare
orreborres avatar
 
Reg.datum: Apr 2003
Inlägg: 309
Det finns något som heter SQL-injection, viket innebär att en ond användare t.ex. fyller i en inloggning enligt följande:

Om din sqlfråga ser ut såhär:

$sql = mysql_query("SELECT * FROM user WHERE user = '$_POST[Anv]' AND pass = '$_POST[Pass]'");

Då kan en ond användare skriva:

Anv: ' OR id=1
Pass: ' OR 1=1

Detta ger:
$sql = mysql_query("SELECT * FROM user WHERE user = '' OR id=1 AND pass = '' OR 1=1");

Då blir denna person inloggad som personen med id 1, vilket ofta är en administrator.
Detta är och ett relativt snällt exempel, man kan exekvera andra kommandon.

Det finns en del säkerhetsåtgärder inbyggda i en del SQL-servrar, men man bör aldrig tillåta användare att skicka in ' i databasen, om det är en text som ska läggas in och man vill tillåta ' kan man alltid använda addslashes().

Mvh
orreborre är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-10-04, 03:26 #8
Max Max är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2003
Inlägg: 721
Max Max är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2003
Inlägg: 721
Citat:
Originally posted by orreborre@Oct 3 2003, 16:13
Det finns något som heter SQL-injection, viket innebär att en ond användare t.ex. fyller i en inloggning enligt följande:

Om din sqlfråga ser ut såhär:

$sql = mysql_query("SELECT * FROM user WHERE user = '$_POST[Anv]' AND pass = '$_POST[Pass]'");

Då kan en ond användare skriva:

Anv: ' OR id=1
Pass: ' OR 1=1

Detta ger:
$sql = mysql_query("SELECT * FROM user WHERE user = '' OR id=1 AND pass = '' OR 1=1");
Det var det jag trodde. Har jag aldrig tänkt på tidigare, tack för tipset!
Max är inte uppkopplad   Svara med citatSvara med citat
Oläst 2003-10-09, 22:11 #9
Max Max är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2003
Inlägg: 721
Max Max är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2003
Inlägg: 721
Citat:
Originally posted by nomicon@Oct 1 2003, 13:21
Se ALLTID, ALLTID till att kolla datan som kommer från klienterna, dvs via htmlforumlär. Om dom ska ange ett postnummer så sak det inte finnas annat än siffror från det fältet, samma med förnamn, ska inte komma med skräptecken där såsom ',%@#"¤$€"!# osv, endast a-zA-Z, ej heller siffror.

Läs mera om mysql_escape_string
Som jag förstår av php-manualen så borde det räcka att använda mysql_escape_string() - är det rätt uppfattat eller måste jag kolla efter skräptecken också? Vad är er erfarenhet?
Max är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 04:45.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017