100% Sikker SQL search query

Tags:    php

Hej udviklere!

Hvis jeg skal sikre min søgemaskine på min hjemmeside mod søgninger som kan skade eller vise oplysninger i mit system, hvilke PHP sikkerheds funktioner bør jeg så benytte på søgestrængen?

P.S Altså så sikkert at jeg kunne opbevare kreditkortoplysninger i min database hvis jeg ville :D

Med Venlig Hilsen
MPVM



Hello Mathias,


Omkring SQL injections og hvordan man beskytter sig imod dem:

Du skal lave det som jeg kalder for en SQLtype-funktion.

Grunden til at jeg kalder det for en SQLtype-funktion, er at den ikke arbejder med PHPs typeset, men derimod med Databasen.

Selv om mysql i PHP kommer med en funktion - mysql_real_escape_string() - så er det efter min mening langt fra nok.

Fold kodeboks ind/udKode 


Du kan jo pröve at lege lidt med denne funktion. SQL injections er en meget anvendt måde at kompromitere et website på og få websitet til at göre ting som absolut ikke er hensigten. Derfor, denne funktion.

Håber at du kan bruge funktionen, Mathias.

Omkring kort betalinger:

Omkring kort betalinger, så er det sådan at du __SKAL__ kryptere de data du opbevare i din database. Til dette vil jeg anbefale MCrypt til opgaven, hvis du anvender PHP - selv om jeg nok må sige at jeg absolut IKKE vil anbefale PHP hvis du skal lave noget somhelst med betalinger, osv. Det er PHP ALT for "usikkert til" - PHP er ikke Type-stärkt nok i variabler og data håndtering til dette. Java og ASP.NET, derimod er rigtig gode til at håndtere denne opgave.

MCrypt er praktisk fordi MCrypt tillader både kryptering og dekryptering. :-)

Du er velkommen til at kontakte mig hvis du har flere spörgsmål. God luck!



Martin, at PHP ikke skulle kunne bruges til kort betaling fordi det ikke er type stærkt, er simpelthen noget vrøvl! PHP kan være lige så sikkert som så meget andet, hvis man ellers gør det ordentligt. Langt de fleste security issues som PHP verdenen ser, er forårsaget af ringe programmører, for ja, dem er der mange af når sproget er gratis og let at komme i gang med :)

Mvh.

Kasper (TSW)



Ah, floskler... det er sgu nu en evne man må klappe af... :)

...

Vedr. sikring af SQL.

Så vil jeg benytte MySQLi extension som er langt mere sikker end den gamle MySQL extension der kom med PHP4.
MySQLi tillader "parameteriserede" SQL strenge som f.eks:
Fold kodeboks ind/udKode 
Bemærk at der er ingen gnyffer er nogen art.
Det er så muligt at binde værdier som parametrer og MySQLi vil behandle og sikre værdien fra at bryde SQL sætningen.
Du kan naturligvis behandle værdien før du binder den til SQL sætningen.

se mere på http://www.php.net/mysqli



Det er jo så en mening du har ret til, Kasper. Jeg kan så kun sige at jeg er uenig i at PHP er sikkert/stärkt nok til at udföre håndtering af kort betalinger.

Men det undre mig at du siger at det er noget vrövl når jeg siger at PHP ikke er type-stärkt.

I min verden er sikkerhed i programmering også et spörgsmål om at sproget er type-stärkt.

Det er jo nemlig et af PHP's "varemärker" at man ikke behöver at tildele en given variable en given type, men at man kan ändre typen som det best passer.

Ah, floskler... det er sgu nu en evne man må klappe af... :)


Jeg har nu meget svärt hved at se at det skulle väre en floskel, det må jeg indrömme.

Du vil da virkelig ikke påstå at PHP er lige så stärkt som ASP.NET eller JAVA?



Indlæg senest redigeret d. 15.08.2009 19:46 af Bruger #11375
Hej Martin,

>Det er jo så en mening du har ret til, Kasper. Jeg kan så kun sige at jeg er uenig i at PHP er sikkert/stärkt nok til at udföre håndtering af kort betalinger.

Ja det kan vi jo så slås frem og tilbage om, men vil du virkelig påstå at en dygtig PHP koder ikke kan lave et lige så sikkert system med PHP, som en dygtig Java/ASP.NET koder kan?

>Men det undre mig at du siger at det er noget vrövl når jeg siger at PHP ikke er type-stärkt.

Det siger jeg heller ikke. Jeg siger at det er noget vrøvl at bruge det som begrundelse for at sproget ikke er sikkert nok. Uddybning følger:

>I min verden er sikkerhed i programmering også et spörgsmål om at sproget er type-stärkt.

Du har ret i at det åbner op for visse sikkerhedsmæssige problemer, men det er jo ikke det samme som at de ikke kan løses? Igen, det kommer jo an på programmøren. Det er vel blot et spørgsmål om at bruge de dertil indrettede metoder til at tjekke at ens variabler har de værdier som det er meningen at de skal have?

>Det er jo nemlig et af PHP's "varemärker" at man ikke behöver at tildele en given variable en given type, men at man kan ändre typen som det best passer.

Jeps, og naturligvis er der både fordele og ulemper ved det, men det er stadig ikke det samme som at du ikke kan skrive vandtæt PHP kode :)

Mvh.

Kasper (TSW)



Hello Mathias,

snip

Omkring kort betalinger, så er det sådan at du __SKAL__ kryptere de data du opbevare i din database. Til dette vil jeg anbefale MCrypt til opgaven, hvis du anvender PHP - selv om jeg nok må sige at jeg absolut IKKE vil anbefale PHP hvis du skal lave noget somhelst med betalinger, osv. Det er PHP ALT for "usikkert til" - PHP er ikke Type-stärkt nok i variabler og data håndtering til dette. Java og ASP.NET, derimod er rigtig gode til at håndtere denne opgave.


Hello Martin

Så tror jeg lige vi ligger hashpiben ned en gang. At PHP ikke skulle være velegnet til at bruge i forbindelse med kortdetaljer er jo helt ude i skoven. Det bliver jo allerede brugt rundt omkring til håndtering af netop dette. Bare kig på Quickpay fx. En helt anden ting er så at ingen normale mennesker der ikke skal lave en betalingsgateway ønsker at gemme kortdata, for det første fordi ikke er tilladt til andet end behovet for at gennemføre transaktionen, for det andet fordi det vil kræve PCI certificeringer, og det ønsker man ikke.

Om et sprog er typestærkt eller ej har ingen indflydelse på at du stadig skal tjekke dine inputs for crap. Det er det samme uanset sprog, og som en anden har påpeget har PHP fint mulighed for, som en ekstra security feature mht SQL at bruge parametre til queries.

Hvis du virkelig skriver så sloppy kode at du har behov for en compiler der hyler hver gang du assigner til variabler af forkerte typer, så er det nok snarere et spørgsmål om at du burde lade være med at se porno når du koder, og faktisk koncentrere dig om hvad du laver.



Indlæg senest redigeret d. 15.08.2009 21:32 af Bruger #890
Tak skal i have alle sammen!
Og tak for funktionen Martin
:D

Hilsen Mathias



t