Programør til Mysqli

Tags:    mysqli programering

<< < 12 > >>
Jeg står og skal have lavet mine filer om til Mysqli, så jeg kan få sikkerheden længere op, end hvad den er nu, hvor jeg har oplevet mysqli injections.

Det drejer sig omkring filerne

Login.php - logud.php - opret.php - profil.php - retprofil.php

Hvis der er nogle der er villige og hvor meget vil de have for det?



12 svar postet i denne tråd vises herunder
5 indlæg har modtaget i alt 19 karma
Sorter efter stemmer Sorter efter dato

Jeg står og skal have lavet mine filer om til Mysqli,

god beslutning, det gamle Mysql API er også på vej ud og temelig usikkert, som du har oplevet,
http://dk.php.net/manual/en/mysqlinfo.api.choosing.php

du bør kigge på Prepared Statements (kræver Mysqli eller PDO), istedet for halve løsninger med mysql_real_escape_string / mysqli_real_escape_string
en quick start til Prepared Statements http://www.eksperten.dk/guide/1480


Spørger jeg nok lidt dumt men hvad er der godt ved det? , mange snakker om det?

Php Dabase Object (PDO), er et ensartet PHP API, til databaser, så du nemt kan skifte database, fra feks MYSQL til en MSQL, eller Oracle, eller...
det kunne meget vel være fremtiden, da man ikke er bundet til Mysql som Database

du kan sammenligne det med ISO 7 lags modellen persistents lag (ODBC, JDBC)
PDO er bare et Abstraction Layers http://www.php.net/manual/en/book.pdo.php



Prepared statements beskytter kun imod sql injection, hvis de bruges rigtigt.

Ligesom selvbyggede sql strenge er beskyttede mod sql injection, hvis man gør det rigtigt.



Hvorfor ikke blive helt moderne og brug PDO ?



Gustav. Det kan være meget svært at vide på forhånd, om man engang i fremtiden vil bruge en anden database engine, men ved at bruge PDO kan det være ligemeget. Man udskifter bare databasen.

Hvor jeg arbejder har vi i 12 år brugt MySQL, men alle systemer, som jeg har ansvaret for, bruger en database wrapper (i PHP bruger jeg PDO). Det betyder så, at jeg på min egen maskine kan bruge SQLite til testing. Så behøver jeg ikke at sætte MySQL op og gøre alt muligt for at få den i en tilstand, som jeg kan bruge til tests. Jeg sletter bare min SQLite database fil og så er jeg tilbage til square one.



@dan, hvordan er PDO mere moderne end MySQLi? Jeg foretrækker også PDO - men for så vidt er det vel ligemeget hvilken man bruger, hvis man ikke har ambitioner om at bruge andet end MySQL?

Og Robert har ret - det nytter ikke noget bare at bruge prepared statements og så tro at man er over det problem. Ordenlig input validering er endnu mere vigtigt.

For eksempel - når du tager et ID fra en URI - så skal det bestå udelukkende af tal. En regex med [0-9]{1,} eller en ctype_digit() kan klare det. Hvis du beder om en email adresse, så kan du tjekke den med filter_input/filter_var og email filteret...



Hvorfor ikke blive helt moderne og brug PDO ?




Spørger jeg nok lidt dumt men hvad er der godt ved det? , mange snakker om det?



@Robert - point taken. Jeg tror ærligtalt at det er de færreste PHP-entusiaster der nogensinde stifter bekendtskab med andet end MySQL. Måske en kamufleret MariaDB på et ideologisk shared host. De fleste hosts bruger MySQL som standard. Så med mindre at man arbejder i et miljø, hvor det er realistisk at der kan komme et skift af DBMS på tale, så er man ikke bedre stillet med PDO end MySQLi. Når det er sagt, så bruger jeg også selv PDO.

Smart idé med SQLite til lokal udvikling. Jeg kører selv med en lille debian-vm med en fuld nginx, mysql og php stack, i headless mode, med fiktive /etc/hosts .dev domæner. Hele stacken bruger under de 200 MB ram som jeg har smidt efter maskinen og jeg kan ikke mærke forskel i CPU forbruget. Jeg har mounted en mappe fra mit lokale filsystem ind som virtuel hdd til vm'en - så der er ingen afbrydelser i forbindelse med deployment. Men SQLite til lokal udvikling er et perfekt alternativ til folk der ikke gider/kan sætte et LEMP/LAMP miljø op.



@Gustav
Du har sikkert ret i at de fleste bruger MySQL og ikke har i sinde at skifte, men det kan ikke garanteres, at de ikke ender med det alligevel. Oracle har jo rettighederne til MySQL nu og de har truffet nogle mærkelige valg. Maria er pt. fuldt kompatibelt, men mon det fortsætter?
Der er mange spørgsmål, og jeg tvivler på, at Maria og MySQL er kompatible om fem år. Hvis du bruger PDO, kan du være fuldstændig ligeglad. mysqli giver ikke fordele frem for PDO, så jeg ser ingen grund til IKKE at bruge PDO.

Mange er nu i gang med at skifte fra de gamle til de nye funktioner. En dag kommer der nyere, og så skal man skifte igen...medmindre man har brugt en abstraktion, for så er det bare abstraktionen, som skal reimplementeres.



Jeg tror ikke at det går så galt med MySQL efter Oracle, som nogen synes, og jeg tror ikke at der kommer en dag i en overskuelig fremtid, hvor MySQLi ikke er godt nok. Og først og fremmest tror jeg ikke, at MySQL bliver erstattet som defacto standard databasen for PHP-entusiaster.

Men du har ret igen. Der er ikke nogen rationel grund til at bruge MySQLi over PDO. Derfor bør det vel være vores første anbefaling. Men der er jo et alternativ - og hvis man - af irrationelle grunde - foretrækker det, så går det nok også :-)



@Gustav angående dit lokale test miljø ... Har du prøvet, at lege med det Ruby gem der hedder Vagrant ( vagrantup.com )



<< < 12 > >>
t