Avatar billede gvp Nybegynder
03. april 2008 - 10:38 Der er 8 kommentarer og
1 løsning

PHP Oracle injection angreb

Kære eksperter, når jeg skriver mine SQL sætninger er jeg lidt interesseret i at finde en funktion lignende mysql_real_escape_string til oracle statements, uden at skulle over i stored procedures. Findes der noget, som jeg har overset, eller skal jeg til at lave stored procedures, for at få et minimum af sikkerhed i min applikation? Som midlertidig nødløsning har jeg bare en funtion der erstatter \ med \\, og ' med \'.
Hjæælp!

vh gvp
Avatar billede rax Praktikant
03. april 2008 - 14:26 #1
hmm, vil mysql_real_escape_string ikke gøre jobbet for dig, selvom det er oracle?
Avatar billede pidgeot Nybegynder
03. april 2008 - 14:34 #2
Nej, det vil den ikke...

...for det første kræver mysql_real_escape_string en MySQL-forbindelse, da den skal tage højde for tegnsæt, og sådan en har man af gode grunde ikke når man har fat i Oracle...

...for det andet er der ingen garanti for at Oracle vil have escapet på samme måde som MySQL, så det er ikke sikkert det bliver fanget...

...og for det tredje, bør escaping kun bruges som en absolut nødløsning, da der kan (og det har der såmænd også været i både MySQL og PostgreSQL) fejl i escapingfunktionen ved tegnsæt der bruger flere bytes!

Den eneste måde at sikre sig mod SQL injection er ved at bruge parameters - kig på http://php.net/oci_parse. Parameters fungerer nemlig uden nogen form for escaping - værdier behandles separat fra resten af SQL'en, og det er dermed umuligt at injecte noget, uanset hvad der må være af problemer i diverse escapingfunktioner.
Avatar billede rax Praktikant
03. april 2008 - 14:41 #3
hehe fair nok :)
personlingt ville jeg have lavet det med stored procedures, så jeg løber ikke ind i den problemstilling, men vil da helt sikkert lige tage et kig på dit link ;)
Avatar billede gvp Nybegynder
03. april 2008 - 14:46 #4
Det er også oci_bind_by_name() jeg har haft kig på, da jeg migrerer fra mysql. Jeg må nok bide i det sure æble og lave det hele om. Tak for svar.
Avatar billede pidgeot Nybegynder
03. april 2008 - 15:21 #5
Stored procedures forhindrer SQL injection mod det der ligger INDE i dem, ja - men du sender jo også en SQL-sætning afsted for at køre den pågældende stored procedure, og uden at bruge parameters til den query, så er der sådan set ikke noget der forhindrer mig i at tilføje noget.

Dog hjælper stored procedures på effektiviteten, fordi SQL'en sådan set er fortolket på forhånd, så nogen helt dum ide behøver det ikke være.

Grunden til jeg henviser til oci_parse er fordi oci_bind_by_name skal bruge et statement, og det er det du får fra oci_parse *-)
Avatar billede gvp Nybegynder
03. april 2008 - 15:28 #6
Jep den er jeg med på. Jeg har også haft kigger på oci_bind_by_name() før som jeg skrev, men jeg ledte efter en måde at undgå at skrive ALT om på. Eftersom systemet er internt, og kun nogle IPer kommer til at have adgang glemmer jeg det hele. Det er simpelthen for stort et arbejde, men jeg takker for svar, nu ved jeg at jeg ikke gider :-)

Points: værs'go'.
Avatar billede gvp Nybegynder
03. april 2008 - 15:30 #7
Øh...jeg ved ikke hvorfor, men jeg har trykket på Accepter 15 gange uden det virker, både i explorer of FF. Jeg tror der er noget i vejen med eksperten.dk lige pt.
Avatar billede pidgeot Nybegynder
03. april 2008 - 15:32 #8
Du skal markere mit navn for at acceptere.

Tag evt. at læse http://expfaq.dk/behandling_af_svar#behandling_af_svar, så du har lidt fornemmelse af det hele *-)
Avatar billede gvp Nybegynder
03. april 2008 - 15:32 #9
Måske skal man skrive en kommentar for at det virker?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester