TestMax.dk Paster
  • Forside
  • Print
  • Bookmark
  • Kontakt
  • SiteMap


infobox infobox
 

Function til db-protection SMART

08-10-2009 09:37:25
 
 
Muligheder (Anmeld)
Skrevet af siphon
Kliks 506
Kategori PHP Release script's
Okay hele ideen bag denne funktion var at jeg lavede min beskyttelse af databasen med mysqli_real_escape_string(); funktionen.
Dette blev hurtigt en belastning da jeg kørte mine query's i en sprintf(); og erstattede med mine mysqli_real..... strings. Med andre ord det tog en evighed at skrive !

Derfor har jeg lavet en funktion som kan clean-up strings og array via mysqli_real_escape_string(); funktionen.

Det ser således ud:

function clean($params){
       $connect = db_connect(); // eller: mysqli_connect("HOST", "USERNAME", "PASSWORD", "DATABASE"):
       if(is_array($params)){ //Tjekker om der er pastet et array eller en alminde string in i funktionen
              $cleaned = array(); // opretter variablen $cleaned som et array
              foreach($params as $key => $value){ // Deler $params arrayet op i $keys( ex. $params['KEY'] === $key = 'KEY' ) og $value ( ex. $params['KEY'] = 'VALUE' === $value = 'VALUE' )
              $cleaned[$key] = mysqli_real_escape_string($connect, $value); // her sætter jeg informationen ind i arrayet som $cleaned[ORIGINALKEY] = CLEANED_VALUE.
              }// når der ikk er med til foreach lokken så stopper den ;)
       }else{
              $cleaned =        mysqli_real_escape_string($connect, $params); // Hvis ikke det er et array så bare lav det på stringen !
       }
       return $cleaned; //Returner variablen $cleaned
}


Således ser funktionen ud, og den bruges så ledes:


$mit_array = array('fornavn' => 'Morten', 'efternavn' => 'Hartvigsen');

$mit_array2= clean($mit_array);

echo $mit_array2['fornavn']; //udskriver Morten
echo $mit_array2['efternavn']; //udskriver Hartvigsen


Så ledes bliver det hurtiger at lave database sikkerhed :D..
www.game-community.dk/job
www.game-community.dk/tumblelog/
 
infobox infobox


infobox infobox
 
#1Drax(Anmeld) 08-10-2009 13:12:37
 
 
Lækkert med et dejligt beskrivende og kreativt indlæg :-)

Nu er jeg ikke selv PHP bruger, men udfra hvad du skriver, lyder det bestemt brugervenligt og anvendeligt!

Så 'thumbs up' herfra..
Administrator - TestMax.dk Stifter/Udvikler

Drax's signatur billede
 
infobox infobox

infobox infobox
 
#2jordz(Anmeld) 16-10-2009 23:23:58
 
 
Jeg kan godt se at selve clear functionen er smart i dit system dog vil jeg stadig fraråde folk at bruge netop denne løsning.

Problemet med løsningen er at du faktisk bare gør det mere kompliceret!
Når du indsætter dine værdier i en tabel vil du altid skulle lave en forespørgsel og i denne forspørgsel kan du ligeså godt kalde mysql_real_escape_string eller mysqli_real_escape_string alt efter hvad du vil bruge, istedet for at kalde en anden "hjemmelavet" function.

Problemet med hjemmelavede functioner gør ofte kode mere uoverskueligt for 3. part! derfor som regl brug de functionsnavne som php har givet istedet for at lave synonymer som dette er! (Efter min mening!)
Sprog: PHP - HTML - CSS - Javascript - MSL
Hjemeside: [url]http://www.Webcomfort.dk[/url]
 
infobox infobox

infobox infobox
 
#3siphon(Anmeld) 20-10-2009 09:00:10
 
 
#2 - Har utrolig svært ved at følge dig, mener faktisk at hele din post ikke argumentere for at man ikke bør bruge den, men der imod blot er en opremsning af hvorfor du ikke gider bruge den.

1: kalde mysqli_real_escape_string i sql. Jo det kunne man men sig mig hvad er forskellen på at gøre det ved hver eneste POST variable og så bruge min funktion og skrive clean($_POST); ?? i mine øjne er min metode blot tidssparende.

2: Bør altid bruge php's egen funktioner ? ohm, lille ven det er netop lige det jeg gør !!! ?? har bare gjort brugen af den tidssparende !

3: uoverskueligt for 3. part, tjoh det er måske rigtigt hvis man ikke forstår at sætte de fornødne kommentarer.

Jeg vil gerne påstå at min teknik er 100% lige så god og bruger venlig som at skrive det hele som #2 foreslår. Forskellen ligger i mine øjne KUN i tidsmængden du vælger at bruge på at "clean" dine POST/GET variabler !
www.game-community.dk/job
www.game-community.dk/tumblelog/
 
infobox infobox

infobox infobox
 
#4NoxiaZ(Anmeld) 21-10-2009 21:09:56
 
 
#3 Hvorfor begynde at kalde man lilel ven?
Nå men ud over det vil jeg give #2 ret, det ser max besværligt ud og uoverskueligt.

Det andet er jeg kan ikke lige se hvor jeg skulle få brug for dette, og det nok der det det bliver uoverskueligt.. Men det er sikkert effektivt. - Har aldrig modtaget mine POST/GET i et array, så det er nok grunden til jeg ikke kan se hvor jeg skal bruge det :)

#2 - 3. part har intet at gøre i din kode aligevel, og den vil være lige så uoverskuelig som var det ikke brugt, så det er dårligt aggument for det. Når du er færdig og har en kode på 1000+ linjer er den sq uoverskuelig lige meget hvad du bruger, for en 3. part.

Men anyways, så ser det meget nice ud, hvis man har brug for det :)
Tralalala?
 
infobox infobox

infobox infobox
 
#5jordz(Anmeld) 21-10-2009 21:48:52
 
 
#4 > Jeg må give #3 ret i at $_POST/$_GET jo er et array når du får den ind så det #3 tænker er at du kan kalde: $params = clean($_POST); og så ikke tænke mere over sikkerheden.
Dog mener jeg stadig at det argument med at koden bliver alt for uoverskueligt alene er nok til ikke at bruge denne stump kode.
Sprog: PHP - HTML - CSS - Javascript - MSL
Hjemeside: [url]http://www.Webcomfort.dk[/url]
 
infobox infobox

infobox infobox
 
#6NoxiaZ(Anmeld) 21-10-2009 22:57:28
 
 
#5 > det er selvfølgelig rigtig nok at det er et array, det havde jeg ikke lige tænkte på. Men grunden er at man altid smider den over i en local variable med det samme, eller det er meget normalt at gøre det. :)

Så konklusionen er at den funktion ikke vil blive brugt =)
Tralalala?
 
infobox infobox

infobox infobox
 
#7siphon(Anmeld) 22-10-2009 09:04:40
 
 
Først undskyld for den lille ven kommentar, det var ikke for at fornærme nogen, ved ikke lige hvad den lavede der.

Jeg ved ikke om det er fordi jeg selv har lavet koden eller fordi den bid kode jeg smidt her ind er dårlig opstillet, men jeg syntes bestemt ikke at den er uoverskuelig, måske er det min egen blindhed :P ..

#6 ja det er da meget normalt at gøre, men tænk over det her, hvis du har bygget dit system op via MVC metoden så kan du bruge funktionen clean allerede i dine controllers hvilke betyder at i dine models kan du kalde alle variabler allá $params['KEY'] hvilket i mine øjne gør dine models meget mere overskueligt plus at din clean funktion jo selv vil ligge som en model modul og derfor vil den ikke blive set i den overordnet kode.

Igen vil jeg gerne give jordz en undskyldning for den total barnlige kommentar, håber ikke at jeg har stødt jordz med den kommentar :D

Nu når vi har kommet til den konklution at koden ikke er brugbar, er der så nogen som har nogen forslag for muligvis optimering af den ?


[EDIT]
Vil gerne sige at hvis man fjerner alle kommentarene, skulle koden ikke virke uoverskueligt for nogen da den bare består af et loop og en php function, tilføjede de kommentar fordi jeg troede de ville forklarer hvad funktionen gjorde til dem som måske ikke har arbejdet særlig meget med php. My bad ;)
[EDIT]
www.game-community.dk/job
www.game-community.dk/tumblelog/
 
infobox infobox

Påmindelse ved nyt svar

Ved at tilmelde dig automatisk påmindelse, modtager du en email så snart denne tråd bliver besvaret, dog sender vi kun en mail til dig, også selvom der er kommet flere svar, simpelthen for at spare dig for spam i din indbakke.


infobox infobox
  Svar på tråden  
   
 
 
infobox infobox

infobox infobox
  Læs dette før du sender dit indlæg!  
 
Ved tryk på send knappen accepterer du vores regelsæt som kan læses her
Praktiske informationer
Type Eksempel Resultat
Fed [b]din tekst[/b] din tekst
Kursiv [k]din tekst[/k] din tekst
Understreg [u]din tekst[/u] din tekst
Kode felt [code]din tekst[/code]
din tekst
infobox infobox