abonnement Unibet Coolblue
  zaterdag 21 april 2012 @ 13:58:05 #1
12221 Tijn
Powered by MS Paint
pi_110591964


Als je vragen hebt over PHP/MySQL, dan zit je hier goed met een vaste kliek guru's en een groot aantal regelmatige bezoekers. Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten wát er niet lukt en wélke foutmelding je precies krijgt :)

Zie ook:
PHP Dataverwerking
Officiële PHP website
PHP Documentatie
MySQL Reference Manual
Yet Another PHP Faq
PHP Cheat Sheet
PHP5 Power Programming - boek met uitleg over OOP, Pear, XML, etc

Tutorials:
W3Schools PHP
W3Schools SQL
pi_110591981
quote:
14s.gif Op zaterdag 21 april 2012 13:47 schreef themole het volgende:

[..]

Zou het als ik jou was snel oplossen, de onderste site in je signature is al vatbaar daarvoor.

Verander ?id=9 maar eens in ?id='; krijg je meteen een error.
Of je GET of POST gebruikt maakt helemaal niets uit voor de behandeling van de invoer. Het is en blijft user input, en dat is niet te vertrouwen.
pi_110591990
quote:
14s.gif Op zaterdag 21 april 2012 13:47 schreef themole het volgende:

[..]

Zou het als ik jou was snel oplossen, de onderste site in je signature is al vatbaar daarvoor.

Verander ?id=9 maar eens in ?id='; krijg je meteen een error.
Ja een error, maar dat moeten mensen ook niet zelf gaan invullen natuurlijk, als ik naar google.nl/niks ga krijg ik ook een error.

Maar kunnen ze echt schade aanrichten? Want ik heb ook sites voor bedrijven e.d. gemaakt op deze manier.

Wat doet bijvoorbeeld

<?php
'SELECT * FROM `table`
WHERE `string` = "'.mysql_real_escape_string($_GET['foo']).'"
AND `number` = '.intval($_GET['bar']);
?>

dat stukje, die zorgt ervoor dat je alleen maar een woord kan invullen en geen mysql code ofzo?
  zaterdag 21 april 2012 @ 14:04:35 #4
12221 Tijn
Powered by MS Paint
pi_110592183
quote:
0s.gif Op zaterdag 21 april 2012 13:58 schreef JDx het volgende:

[..]

Ja een error, maar dat moeten mensen ook niet zelf gaan invullen natuurlijk, als ik naar google.nl/niks ga krijg ik ook een error.
Bij Google krijg je een error die door Google zelf is gegenereerd. Bij jouw sites krijg je errors die door PHP worden gemaakt. In feite help je hackers door ze informatie te geven over hoe jouw programmatuur in elkaar steekt.

quote:
Maar kunnen ze echt schade aanrichten? Want ik heb ook sites voor bedrijven e.d. gemaakt op deze manier.
Ja, je kunt sowieso alle data in je database uitlezen. Als hetzelfde MySQL-account ook schrijfrechten heeft, kan de database ook worden aangepast.

quote:
Wat doet bijvoorbeeld

<?php
'SELECT * FROM `table`
WHERE `string` = "'.mysql_real_escape_string($_GET['foo']).'"
AND `number` = '.intval($_GET['bar']);
?>

dat stukje, die zorgt ervoor dat je alleen maar een woord kan invullen en geen mysql code ofzo?
mysql_real_escape_string() zorgt ervoor dat het niet mogelijk is om uit de quotes die om je query staan te breken. Daardoor blijft alle user-input onderdeel van jouw query en kan een kwaadwillende niet zelf een nieuwe query uitvoeren.
  zaterdag 21 april 2012 @ 14:04:43 #5
302853 themole
graaft totaal door.
pi_110592188
quote:
0s.gif Op zaterdag 21 april 2012 13:58 schreef Light het volgende:

[..]

Of je GET of POST gebruikt maakt helemaal niets uit voor de behandeling van de invoer. Het is en blijft user input, en dat is niet te vertrouwen.
Waar zeg ik dat het uitmaakt of je POST of GET gebruikt? Ik geef alleen maar een voorbeeld, in dit geval via GET, maar via POST is het natuurlijk ook niet te vertrouwen. :)

quote:
0s.gif Op zaterdag 21 april 2012 13:58 schreef JDx het volgende:

[..]

Ja een error, maar dat moeten mensen ook niet zelf gaan invullen natuurlijk, als ik naar google.nl/niks ga krijg ik ook een error.

Maar kunnen ze echt schade aanrichten? Want ik heb ook sites voor bedrijven e.d. gemaakt op deze manier.

Wat doet bijvoorbeeld

<?php
'SELECT * FROM `table`
WHERE `string` = "'.mysql_real_escape_string($_GET['foo']).'"
AND `number` = '.intval($_GET['bar']);
?>

dat stukje, die zorgt ervoor dat je alleen maar een woord kan invullen en geen mysql code ofzo?
http://nl.wikipedia.org/wiki/SQL-injectie
Niet altijd serieus
  zaterdag 21 april 2012 @ 14:05:10 #6
12221 Tijn
Powered by MS Paint
pi_110592204
quote:
14s.gif Op zaterdag 21 april 2012 14:04 schreef themole het volgende:

[..]

Waar zeg ik dat het uitmaakt of je POST of GET gebruikt?
Dat vraagt JDx.
  zaterdag 21 april 2012 @ 14:05:48 #7
302853 themole
graaft totaal door.
pi_110592231
quote:
2s.gif Op zaterdag 21 april 2012 14:05 schreef Tijn het volgende:

[..]

Dat vraagt JDx.
Idd, die quote was achteraf niet echt handig. :P
Niet altijd serieus
pi_110592276
quote:
14s.gif Op zaterdag 21 april 2012 14:04 schreef themole het volgende:

[..]

Waar zeg ik dat het uitmaakt of je POST of GET gebruikt? Ik geef alleen maar een voorbeeld, in dit geval via GET, maar via POST is het natuurlijk ook niet te vertrouwen. :)
Je reageert op een vraag of er post gebruikt moet worden met een opmerking 'zo zou ik het doen'. En dan reageer ik daar weer op.
pi_110592357
JDx doe dat eens heel snel veranderen, je bent binnen 10 seconden binnen op je database man.
pi_110592392
Ja ik ben bezig, maar zie niet hoe, pm eens hoe je het doet?

Please help ff, want ik heb ook CMS'en gemaakt voor bedrijven, software om medewerkers in te plannen bij Restaurants, etc.
pi_110592479
http://kledingmerken.jdx.nl/single.php?id=44

Je doet ergens $_GET['id'] richting de database, begin dat eerst maar eens te veranderen naar mysql_real_escape_string($_GET['id'])

Beste is om PDO te gebruiken.
pi_110592515
PDO?

Maar laat eens zien hoe je misbruik maakt van dat dan? Dat begrijp ik niet helemaal als ik invul:

44' OR 'a' = 'a'

dan gebeurd er niets.
pi_110592551
-edit weg-

Neem aan dat je het nu wel gezien hebt, heeft geen meerwaarde om te laten staan.

[ Bericht 76% gewijzigd door TwenteFC op 21-04-2012 14:23:55 ]
  zaterdag 21 april 2012 @ 14:17:13 #14
157634 Civilian
Better safe than Sony
pi_110592566
quote:
0s.gif Op zaterdag 21 april 2012 14:15 schreef JDx het volgende:
PDO?

Maar laat eens zien hoe je misbruik maakt van dat dan? Dat begrijp ik niet helemaal als ik invul:

44' OR 'a' = 'a'

dan gebeurd er niets.
http://php.net/manual/en/pdo.prepared-statements.php
I'm not good with advice.. Can i interest you in a sarcastic comment?
pi_110592591
quote:
19s.gif Op zaterdag 21 april 2012 14:14 schreef TwenteFC het volgende:
http://kledingmerken.jdx.nl/single.php?id=44

Je doet ergens $_GET['id'] richting de database, begin dat eerst maar eens te veranderen naar mysql_real_escape_string($_GET['id'])
Ik vind intval($_GET['id']) ook goed, dan weet je zeker dat je een getal hebt en niet een string als '9 or 1=1'.
quote:
Beste is om PDO te gebruiken.
True. Maar als je een hele applicatie moet omschrijven, is dat best veel werk.
pi_110592627
quote:
0s.gif Op zaterdag 21 april 2012 14:15 schreef JDx het volgende:
PDO?

Maar laat eens zien hoe je misbruik maakt van dat dan? Dat begrijp ik niet helemaal als ik invul:

44' OR 'a' = 'a'

dan gebeurd er niets.
http://kledingmerken.jdx.nl/single.php?id=9%20or%201%3D1
  zaterdag 21 april 2012 @ 14:19:28 #17
157634 Civilian
Better safe than Sony
pi_110592641
quote:
0s.gif Op zaterdag 21 april 2012 14:17 schreef Light het volgende:

[..]

Ik vind intval($_GET['id']) ook goed, dan weet je zeker dat je een getal hebt en niet een string als '9 or 1=1'.

[..]

True. Maar als je een hele applicatie moet omschrijven, is dat best veel werk.
Als je websites hebt voor bedrijven kan je dit soort dingen niet maken. Dan maar omschrijven. Maar dit is gewoon link ;)
I'm not good with advice.. Can i interest you in a sarcastic comment?
pi_110592672
quote:
Verrek :)

Mooi dat ik dit nu ontdek en niet dat mn baas opeens met een boze klant komt :P
pi_110592713
quote:
7s.gif Op zaterdag 21 april 2012 14:19 schreef Civilian het volgende:

[..]

Als je websites hebt voor bedrijven kan je dit soort dingen niet maken. Dan maar omschrijven. Maar dit is gewoon link ;)
Ik zou liever voor de snellere oplossing kiezen, denk ik. Dat omschrijven kan altijd nog, eerst moet de boel veilig worden.
  zaterdag 21 april 2012 @ 14:22:08 #20
12221 Tijn
Powered by MS Paint
pi_110592733
quote:
0s.gif Op zaterdag 21 april 2012 14:20 schreef JDx het volgende:

[..]

Verrek :)

Mooi dat ik dit nu ontdek en niet dat mn baas opeens met een boze klant komt :P
Het probleem is alleen dat er misschien al een uittreksel van je hele database op internet rondzwerft. Je wachtwoorden zijn wel salted encrypted enzo? Die zou ik ook maar even wijzigen als ik jou was.
pi_110592769
quote:
0s.gif Op zaterdag 21 april 2012 14:21 schreef Light het volgende:

[..]

Ik zou liever voor de snellere oplossing kiezen, denk ik. Dat omschrijven kan altijd nog, eerst moet de boel veilig worden.
Inderdaad, persoonlijk had ik hem op zwart gegooid.. alles nagelopen, en dan weer online gegooid.
Om vervolgens alles om te bouwen.

PDO is sowieso iets dat de moeite waard is om jezelf aan te leren.
pi_110592771
quote:
2s.gif Op zaterdag 21 april 2012 14:22 schreef Tijn het volgende:

[..]

Het probleem is alleen dat er misschien al een uittreksel van je hele database op internet rondzwerft. Je wachtwoorden zijn wel salted encrypted enzo? Die zou ik ook maar even wijzigen als ik jou was.
Wachtwoorden staan er verder niet in volgens mij.
pi_110592772
quote:
0s.gif Op zaterdag 21 april 2012 14:20 schreef JDx het volgende:

[..]

Verrek :)

Mooi dat ik dit nu ontdek en niet dat mn baas opeens met een boze klant komt :P
Wees blij dat er nog geen grapjas is geweest die een DELETE statement heeft uitgevoerd :P
  zaterdag 21 april 2012 @ 14:24:08 #25
12221 Tijn
Powered by MS Paint
pi_110592802
quote:
0s.gif Op zaterdag 21 april 2012 14:23 schreef JDx het volgende:

[..]

Wachtwoorden staan er verder niet in volgens mij.
Geen enkel wachtwoord in geen enkele tabel van je CMS?
pi_110592809
quote:
0s.gif Op zaterdag 21 april 2012 14:23 schreef Pakspul het volgende:

[..]

Wees blij dat er nog geen grapjas is geweest die een DELETE statement heeft uitgevoerd :P
Dat zou ook kunnen? Oh god...
  zaterdag 21 april 2012 @ 14:24:42 #27
12221 Tijn
Powered by MS Paint
pi_110592823
quote:
0s.gif Op zaterdag 21 april 2012 14:24 schreef JDx het volgende:

[..]

Dat zou ook kunnen? Oh god...
Als je input niet filtert en direct in een query gooit, kan iedereen elke query uitvoeren die 'ie maar wil.

Zie ook het stripje over Bobby Tables dat ik in het vorige topic had gepost. Dat kan letterlijk gebeuren met dit soort code.
pi_110592831
quote:
Dat lijkt alweer een stuk beter :)
  zaterdag 21 april 2012 @ 14:25:00 #29
302853 themole
graaft totaal door.
pi_110592834
quote:
0s.gif Op zaterdag 21 april 2012 14:24 schreef JDx het volgende:

[..]

Dat zou ook kunnen? Oh god...
Yup, en dingen inserten. Allemaal mogelijk. Maak daarom ook maar een backup van je database.
Niet altijd serieus
pi_110592844
quote:
Slim is om nog een extra controle toe te voegen. Zodat ID ook daadwerkelijk een integer is (liefste unsigned uiteraad, maar integer eerst is al voldoende).
pi_110592872
quote:
0s.gif Op zaterdag 21 april 2012 14:24 schreef Light het volgende:

[..]

Dat lijkt alweer een stuk beter :)
  zaterdag 21 april 2012 @ 14:26:33 #32
157634 Civilian
Better safe than Sony
pi_110592875
Daarom ook geen CMS bouwen als je stiekem eigenlijk niet weet wat je doet :P Er zijn er genoeg die al een heel stuk veiliger van zichzelf zijn.. Maargoed, dat is mijn mening.
I'm not good with advice.. Can i interest you in a sarcastic comment?
pi_110592884
Gelukkig zijn de meeste dingen die ik gemaakt heb interne tools op ons interne netwerk, maar heb dus ook een paar dingen gemaakt voor externe bedrijven, gelukkig gaat het veelal om int-en / int's ?

Dus kan veel al beveiligen door die intval() toe te passen.
pi_110592891
quote:
0s.gif Op zaterdag 21 april 2012 14:25 schreef Pakspul het volgende:

[..]

Slim is om nog een extra controle toe te voegen. Zodat ID ook daadwerkelijk een integer is (liefste unsigned uiteraad, maar integer eerst is al voldoende).
Zo te zien wordt nu intval() gebruikt. Dan krijg je 0 als je met tekst begint, niets spannends verder.
pi_110592968
quote:
0s.gif Op zaterdag 21 april 2012 14:26 schreef JDx het volgende:
Gelukkig zijn de meeste dingen die ik gemaakt heb interne tools op ons interne netwerk, maar heb dus ook een paar dingen gemaakt voor externe bedrijven, gelukkig gaat het veelal om int-en / int's ?

Dus kan veel al beveiligen door die intval() toe te passen.
Als je dit aan klanten gelevert hebt, zou ik ze maar heel snel op gaan bellen dat ze als een malle hun websites uit de lucht halen, voordat je volgende week op tweakers staat.
pi_110592973
Ergste is denk ik mijn rooster software, een groot restaurant plant al zijn medewerkers in doormiddel van dit rooster, maar op die database draait bijvoorbeeld ook het kassa systeem, die draait op een site waar je gelukkig wel eerst moet inloggen om op te komen, maar goed, blijft link.
  zaterdag 21 april 2012 @ 14:30:32 #37
12221 Tijn
Powered by MS Paint
pi_110592990
quote:
0s.gif Op zaterdag 21 april 2012 14:26 schreef JDx het volgende:

Dus kan veel al beveiligen door die intval() toe te passen.
Realiseer je wel dat het pas veilig is wanneer letterlijk elke user input gecheckt is. Al is er maar 1 plek waar je het vergeet, dan kan iemand via die plek alsnog je hele database manipuleren.
pi_110593014
quote:
2s.gif Op zaterdag 21 april 2012 14:30 schreef Tijn het volgende:

[..]

Realiseer je wel dat het pas veilig is wanneer letterlijk elke user input gecheckt is. Al is er maar 1 plek waar je het vergeet, dan kan iemand via die plek alsnog je hele database manipuleren.
Wat is er toch ook een tuig op de wereld, ik zie altijd het goede, nooit de mogelijkheid om misbruik te maken.
pi_110593018
quote:
0s.gif Op zaterdag 21 april 2012 14:29 schreef JDx het volgende:
Ergste is denk ik mijn rooster software, een groot restaurant plant al zijn medewerkers in doormiddel van dit rooster, maar op die database draait bijvoorbeeld ook het kassa systeem, die draait op een site waar je gelukkig wel eerst moet inloggen om op te komen, maar goed, blijft link.
Dat maakt dus niet uit. Als het op dezelfde database draait, kan iedere malloot daar nu gewoon bij.
pi_110593054
quote:
0s.gif Op zaterdag 21 april 2012 14:31 schreef JDx het volgende:

[..]

Wat is er toch ook een tuig op de wereld, ik zie altijd het goede, nooit de mogelijkheid om misbruik te maken.
:P Dan ben je wel heel naief.
pi_110593081
Wat mij betreft is het "tuig" de mensen die ditsoort tijdbommen aan een klant durven leveren.
  zaterdag 21 april 2012 @ 14:33:55 #42
12221 Tijn
Powered by MS Paint
pi_110593103
quote:
0s.gif Op zaterdag 21 april 2012 14:31 schreef JDx het volgende:

[..]

Wat is er toch ook een tuig op de wereld, ik zie altijd het goede, nooit de mogelijkheid om misbruik te maken.
Het ligt niet aan het tuig, je moet gewoon robuuste software maken. Hackers helpen je juist om betere code te schrijven.

Misschien is het ook handig om wat vakliteratuur te gaan lezen, want het is echt schokkend dat je hier nu pas achter komt. SQL-injecties zijn al heel erg lang bekend.
pi_110593131
quote:
19s.gif Op zaterdag 21 april 2012 14:32 schreef TwenteFC het volgende:

[..]

:P Dan ben je wel heel naief.
Gewoon niet aan gedacht dat mensen er eventueel misbruik van kunnen maken.


quote:
13s.gif Op zaterdag 21 april 2012 14:33 schreef Tijn het volgende:

[..]

Het ligt niet aan het tuig, je moet gewoon robuuste software maken. Hackers helpen je juist om betere code te schrijven.

Misschien is het ook handig om wat vakliteratuur te gaan lezen, want het is echt schokkend dat je hier nu pas achter komt. SQL-injecties zijn al heel erg lang bekend.
Alles geleerd als hobby. Weet alleen wat ik nodig had om m'n sites werkend te krijgen en toen aangenomen toen ze mijn software zagen (niet de code).
  zaterdag 21 april 2012 @ 14:36:23 #44
12221 Tijn
Powered by MS Paint
pi_110593164
quote:
0s.gif Op zaterdag 21 april 2012 14:34 schreef JDx het volgende:

[..]

Gewoon niet aan gedacht dat mensen er eventueel misbruik van kunnen maken.
Creatief gebruik van het woord "gewoon".
pi_110593288
Ja ik werk er nog niet zo lang en toen ik er kwam kende ik alleen hobby matig PHP.

Ik pas dingen aan van allerlei vorige medewerkers, alles is geschreven in verschillende talen. Ene keer VBscript, dan weer C#, dan weer ASP.NET, laatst dus iets in PHP, etc...

Het is steeds, kan je snel ff dit aanpassen? Dit tooltje werkt niet meer, kun je daar naar kijken? Etc.

Zal van af nu ook rekening houden met de mogelijkheid tot hacken.
  zaterdag 21 april 2012 @ 14:40:52 #46
12221 Tijn
Powered by MS Paint
pi_110593289
Overigens ook niet erg professioneel van dat bedrijf waar je werkt dat je code blijkbaar nooit is gereviewed.
pi_110593306
Wel pijnlijk om te lezen ja.. als ik dit als excuus had gebruikt dan had ik klappen gekregen van mijn collega's :@
pi_110593310
quote:
2s.gif Op zaterdag 21 april 2012 14:40 schreef Tijn het volgende:
Overigens ook niet erg professioneel van dat bedrijf waar je werkt dat je code blijkbaar nooit is gereviewed.
Nee ik ben aangenomen omdat alle programmeurs zijn gestopt of ontslagen. Ze hadden niemand meer die dit kon en konden niemand vinden ;)

Probeer de boel op orde te krijgen nu, door dit topic ook een stuk veiliger dus.

Ik was grafisch vormgever/webdeveloper bij een reclamebureau, ben vanuit hobby overgestapt naar Software Developer.
  zaterdag 21 april 2012 @ 14:43:30 #49
12221 Tijn
Powered by MS Paint
pi_110593354
Klinkt als een fantastische toko B-)
pi_110593361
:) Maarja, het is gebeurd. Wat je zegt; het is nu gewoon zaak om er van te leren, en het nooit meer fout te doen.
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')