PDO en Mysql injectie

Overzicht

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Wouter J

Wouter J

13/01/2011 21:54:48
Anchor link
Kees Schepers op 13/01/2011 21:16:20:
Ik zie ook sommige actieve gebruikers hier die zich rot irriteren aan onwetende nieuwe programmeurs die nog niet goed wegwijs zijn in het vinden van oorzaken of oplossen van problemen.

Dit zie je dan verkeerd. Hier op het forum willen we iedereen helpen. Maar als een topic starter een post maakt van 'Ik heb een fout dit is de code' dan word ik (en vele met mij) daar geïrriteerd van.
Als zo'n persoon vervolgens wijs gaat doen dat wij allemaal slecht zijn en hij het beter weet wekt natuurlijk nog meer irritatie op.
Dit geld ook voor topics waarvan de vragen direct op google zijn te vinden.
Kees Schepers op 13/01/2011 21:16:20:
Ik zelf irriteer me vooral weer dus aan deze mensen die reageren 'Kijk maar op php.net'. Tuurlijk verwijzen naar een bron is altijd goed maar geef ook meteen een nuttig antwoord op iemand zijn vraag waar je iemand mee helpt.

Er gebeurd hier nooit dat iemand alleen een link php.net geeft. Hij/zij stuurt de TS altijd naar de goede pagina, vaak met wat tekst voor en na de link er ook nog bij. Dit slaat dus nergens op.
Kees Schepers op 13/01/2011 21:16:20:
Ik denk dat 80% van de 'ervaren' programmeurs hier zelf ook zo begonnen zijn met 'noob' vragen.

Ja, dit klopt. Maar leren die 'onervaren' mensen dan meer als je ze gelijk geeft en heel aardig en lief gaat praten? Dat maak je mij niet wijs! En leren die mensen meer als ze zelf zoeken of dat wij hier de code voor hun gaan scripten. Wij zijn hier geen gratis webdevelopers!
Kees Schepers op 13/01/2011 21:16:20:
Als je geirriteerd bent reageer dan gewoon niet. Als je vind dat iemand lui is reageer dan gewoon niet. Je bent hier om kennis te delen en niet gal te spugen lijkt me :)

Waarom reageer jij dan? Want jij bent nu geïrriteerd, dus moet je niet reageren.

Maar goed. Meneer de goede forum bezoeker. U weet precies hoe het moet en u bent een voorbeeld voor de hele wereld! Ga zo door!
 
PHP hulp

PHP hulp

23/11/2024 12:33:19
 

13/01/2011 22:01:44
Anchor link
Wouter J op 13/01/2011 21:54:48:
Kees Schepers op 13/01/2011 21:16:20:
Ik zelf irriteer me vooral weer dus aan deze mensen die reageren 'Kijk maar op php.net'. Tuurlijk verwijzen naar een bron is altijd goed maar geef ook meteen een nuttig antwoord op iemand zijn vraag waar je iemand mee helpt.

Er gebeurd hier nooit dat iemand alleen een link php.net geeft. Hij/zij stuurt de TS altijd naar de goede pagina, vaak met wat tekst voor en na de link er ook nog bij. Dit slaat dus nergens op.


Doe ik wel. Heel veel antwoorden zijn zo op php / mysql site te vinden. Maar goed, veel vragen kunnen ook gewoon beantwoord worden door een bepaalde pagina op php.net te lezen (ik link dus altijd wel naar een bepaalde pagina).
 
Jelmer -

Jelmer -

13/01/2011 22:18:23
Anchor link
Getting Answers http://j.mp/1sMe9
 
The Ultimate

The Ultimate

13/01/2011 22:19:20
Anchor link
Ik vind dit een interessante vraag. Ben zelf ook onlangs met PDO aan de slag gegaan en loop daarbij tegen hetzelfde probleem aan. Natuurlijk heb ik meteen op php.net gekeken en het antwoord was duidelijk: PDO->quote().

Alleen jammer dat deze PDO-functie niet door alle shared hosts wordt ondersteund (Mijndomein.nl onder andere). Lastig dus. Het is nogal omslachtig om alle communicatie met de database via prepared statements te laten lopen. En aangezien mysql_real_escape_string in PDO niet werkt zul je dus zelf een functie moet maken om de data om te zetten naar een veilige string.

En wederom kijk je dan op php.net en zie je:
Just a little function which mimics the original mysql_real_escape_string but which doesn't need an active mysql connection. Could be implemented as a static function in a database class. Hope it helps someone.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
function mysql_escape_mimic($inp) {
    if(is_array($inp))
        return array_map(__METHOD__, $inp);

    if(!empty($inp) && is_string($inp)) {
        return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp);
    }


    return $inp;
}

?>
Gewijzigd op 13/01/2011 22:24:36 door The Ultimate
 
Kees Schepers

kees Schepers

13/01/2011 22:31:49
Anchor link
Wouter J op 13/01/2011 21:54:48:
Dit zie je dan verkeerd. Hier op het forum willen we iedereen helpen. Maar als een topic starter een post maakt van 'Ik heb een fout dit is de code' dan word ik (en vele met mij) daar geïrriteerd van.
Als zo'n persoon vervolgens wijs gaat doen dat wij allemaal slecht zijn en hij het beter weet wekt natuurlijk nog meer irritatie op.
Dit geld ook voor topics waarvan de vragen direct op google zijn te vinden.


Ik zie wat ik lees op mijn scherm, maar wellicht vind je mijn interpretatie verkeerd. En dat mag natuurlijk. Het voorbeeld wat je geeft vind ik geen goed voorbeeld om in mijn ogen terecht geïrriteerd te zijn. Je bent waarschijnlijk dan geïrriteerd omdat je dezelfde vraag in dezelfde structuur dagelijks terug ziet komen. Maar dan ligt alsnog de oorzaak bij je zelf en niet degene die post.

Niet iedereen heeft hetzelfde inzicht als jij of een andere ervaren programmeur. Bij mijn bedrijf is een tijd terug ook een nieuwe programmeur erbij gekomen, en die maakt dan fouten waarvan je bij jezelf denkt hoe kun je zo'n fout maken of dit is toch zo te vinden maar toch kan je dat diegene niet kwalijk nemen dat komt omdat je zelf een beter ontwikkeld inzicht hebt en je weet welke bronnen je moet raadplegen om je antwoord te krijgen.

Tuurlijk als jij zo iemand advies probeert te geven terwijl de TS erom gevraagd heeft dan is het in mijn ogen wel terecht dat je dat vervelend vind. Voor mij zou dat alsnog geen reden zijn om te reageren maar dat is iedereen voor zichzelf.

Wouter J op 13/01/2011 21:54:48:
Er gebeurd hier nooit dat iemand alleen een link php.net geeft. Hij/zij stuurt de TS altijd naar de goede pagina, vaak met wat tekst voor en na de link er ook nog bij. Dit slaat dus nergens op.


Nou goed, onder jou is al 1 iemand die het toegeeft. Ik ben het met je eens als je naar een bron verwijst en specifiek wijst naar een gedeelte van die bron met tekst en uitleg het duidelijk is (of zou moeten zijn) voor degene die met de vraag zit.

Wouter J op 13/01/2011 21:54:48:
Ja, dit klopt. Maar leren die 'onervaren' mensen dan meer als je ze gelijk geeft en heel aardig en lief gaat praten? Dat maak je mij niet wijs! En leren die mensen meer als ze zelf zoeken of dat wij hier de code voor hun gaan scripten. Wij zijn hier geen gratis webdevelopers!


Als je lief tegen ze praat leren ze niks van, maar maakt het er zeker niet ongezelliger van. Wie weet voelt zo'n lid zich hier dan wel thuis en komt hij vaker terug en later ook om anderen te helpen ? ;-) Als je geen gratis advies wilt geven dan ben je imo al niet op het juiste plek hier want daar is deze site wel voor bedoeld lijkt mij.

Wouter J op 13/01/2011 21:54:48:
Waarom reageer jij dan? Want jij bent nu geïrriteerd, dus moet je niet reageren.

Maar goed. Meneer de goede forum bezoeker. U weet precies hoe het moet en u bent een voorbeeld voor de hele wereld! Ga zo door!


Ben helemaal niet geïrriteerd hoor, ik constateer en probeer alleen maar bij te dragen in een beter forum met meer inhoud. Ik richt het aan niemand persoonlijk verder, wou alleen dit kwijt. Dat jij het blijkbaar wel persoonlijk opvat is vreemd of veelzeggend. Of ik had moeten reageren of niet daar valt inderdaad over te twisten, want de vraag van de TS word er niet mee beantwoord.
 

13/01/2011 23:13:21
Anchor link
The Ultimate op 13/01/2011 22:19:20:
(...)
Het is nogal omslachtig om alle communicatie met de database via prepared statements te laten lopen. (...)

Waarom vind je het dan omslachtig? Het is echt een verademing wat je allemaal met PDO kan doen.

The Ultimate op 13/01/2011 22:19:20:
En wederom kijk je dan op php.net en zie je:(...)


Zou mooi zijn geweest als je een linkie naar die desbetreffende comment had geplaatst.

Kees Schepers op 13/01/2011 22:31:49:
Wouter J op 13/01/2011 21:54:48:
Er gebeurd hier nooit dat iemand alleen een link php.net geeft. Hij/zij stuurt de TS altijd naar de goede pagina, vaak met wat tekst voor en na de link er ook nog bij. Dit slaat dus nergens op.


Nou goed, onder jou is al 1 iemand die het toegeeft. Ik ben het met je eens als je naar een bron verwijst en specifiek wijst naar een gedeelte van die bron met tekst en uitleg het duidelijk is (of zou moeten zijn) voor degene die met de vraag zit.


Ik vind het echt heel erg dat men zelf niet meer die links kunnen vinden. Alle informatie is zo voor het oprapen. Dat was dus ook zo in dit topic.
 
The Ultimate

The Ultimate

14/01/2011 08:41:59
Anchor link
Karl Karl op 13/01/2011 23:13:21:
The Ultimate op 13/01/2011 22:19:20:
(...)
Het is nogal omslachtig om alle communicatie met de database via prepared statements te laten lopen. (...)

Waarom vind je het dan omslachtig? Het is echt een verademing wat je allemaal met PDO kan doen.
Met PDO zeker. Helemaal mee eens. Maar handel jij alles (en dan bedoel ik ook ALLES) af via prepared statements? Bij mij werkt de functie PDO::quote() namelijk niet dus ik ben op zoek naar een oplossing. Of de functie die op php.net staat of alles via prepared statements. Graag hoor ik jouw gedachte daarover!?

Karl Karl op 13/01/2011 23:13:21:
The Ultimate op 13/01/2011 22:19:20:
En wederom kijk je dan op php.net en zie je:(...)
Zou mooi zijn geweest als je een linkie naar die desbetreffende comment had geplaatst.
Ik heb inmiddels de relevante code in mijn reactie hierboven toegevoegd.
 
Jelmer -

Jelmer -

14/01/2011 08:51:12
Anchor link
De SQLite en MySQL drivers implementeren beiden PDO::quote volgens mij (althans, ik ben nog nooit een host tegengekomen waarbij ze niet werkten, ik gebruik PDO al redelijk lang, en het lijkt me sterk dat dit per versie van PHP verschilt) Hoe werkt hij bij jou niet? Heb je een stukje code dat niet werkt?

Ik gebruik het zelf voor gegenereerde queries (want die zijn soms een headache met prepared statements, dit is de easy way out) en daar werkt het bij mij prima. Voor de rest: prepared statements, SQL en data gescheiden houden. Mij bevalt het prima. En natuurlijk als je een query zonder variabelen hebt, dan gewoon PDO::query. Beiden geven een PDOStatement terug, dus ze afwisselen in gebruik is geen enkel probleem.
 
The Ultimate

The Ultimate

14/01/2011 09:27:26
Anchor link
Jelmer rrrr op 14/01/2011 08:51:12:
De SQLite en MySQL drivers implementeren beiden PDO::quote volgens mij (althans, ik ben nog nooit een host tegengekomen waarbij ze niet werkten, ik gebruik PDO al redelijk lang, en het lijkt me sterk dat dit per versie van PHP verschilt) Hoe werkt hij bij jou niet? Heb je een stukje code dat niet werkt?
Ik heb een kleine test gedaan maar zie nu dat PDO::quote toch gewoon werkt. Vreemd want een tijdje terug lukte het mij niet en kreeg ik telkens een error melding. Wellicht is dat dan op USBwebserver geweest? Weet het niet meer precies. Kan dus helaas ook geen code laten zien die een error geeft. :-(

Bedankt overigens voor de heldere toelichting. Ik zie op php.net nu ook dat ze het gebruik van prepared statements inderdaad aanraden boven het gebruik van PDO::quote. Dan sla ik gewoon ook die weg in.

Misschien een stomme vraag maar wanneer kun je gebruik maken van PDO::query en wanneer van PDO->query, althans wat is het verschil tussen de dubbele dubbele punten en het 'pijltje'??

EDIT (to self):
The double colon's allow you to reference a function of a class without actually creating an instance of the class. The syntax is:

classname::functioname();

Note, however, that if any references in the function are made to $this, the call will fail--you will need to create an instance of the class to use the function. Hope that helps.
Gewijzigd op 14/01/2011 09:40:14 door The Ultimate
 
Toby hinloopen

toby hinloopen

14/01/2011 12:22:36
Anchor link
PDO kan, mits er goed gebruik gemaakt wordt van prepared statements, SQL injection tegenhouden, maar het is geen magische toverfee die je scripts beveiligd: het is een tool om het beveiligen tegen SQL injection makkelijker te maken.

@gezeik boven me: wat boeit het dat-ie de vraag op 2 sites stelt? Sinds wanneer mag dat niet?
Gewijzigd op 14/01/2011 12:24:35 door toby hinloopen
 
Jurrian Nijland

Jurrian Nijland

14/01/2011 13:44:25
Anchor link
Offtopic again
Dikke discussie... :o :)
 
Jens V

Jens V

14/01/2011 13:53:51
Anchor link
De vraag is nu wel al een paar keer beantwoord. Als je een discussie wilt die totaal niks met de TS zijn vraag te maken heeft, doe dat dan in de Koffiehoek.

Een account hebben op een andere website dan PHPHulp of een vraag ook op een ander forum posten is niet tegen de gebruikersvoorwaarden van PHPHulp.
 

Pagina: « vorige 1 2

 

Dit topic is gesloten.



Overzicht

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.