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.quote: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.quote: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.
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: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.
Ja, je kunt sowieso alle data in je database uitlezen. Als hetzelfde MySQL-account ook schrijfrechten heeft, kan de database ook worden aangepast.quote:Maar kunnen ze echt schade aanrichten? Want ik heb ook sites voor bedrijven e.d. gemaakt op deze manier.
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.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?
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: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.
http://nl.wikipedia.org/wiki/SQL-injectiequote: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?
Dat vraagt JDx.quote:Op zaterdag 21 april 2012 14:04 schreef themole het volgende:
[..]
Waar zeg ik dat het uitmaakt of je POST of GET gebruikt?
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.quote: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.
http://php.net/manual/en/pdo.prepared-statements.phpquote: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.
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: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'])
True. Maar als je een hele applicatie moet omschrijven, is dat best veel werk.quote:Beste is om PDO te gebruiken.
http://kledingmerken.jdx.nl/single.php?id=9%20or%201%3D1quote: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.
Als je websites hebt voor bedrijven kan je dit soort dingen niet maken. Dan maar omschrijven. Maar dit is gewoon linkquote: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.
Verrekquote:Op zaterdag 21 april 2012 14:18 schreef Light het volgende:
[..]
http://kledingmerken.jdx.nl/single.php?id=9%20or%201%3D1
Ik zou liever voor de snellere oplossing kiezen, denk ik. Dat omschrijven kan altijd nog, eerst moet de boel veilig worden.quote: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
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.quote: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
Inderdaad, persoonlijk had ik hem op zwart gegooid.. alles nagelopen, en dan weer online gegooid.quote: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.
Wachtwoorden staan er verder niet in volgens mij.quote: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.
Wees blij dat er nog geen grapjas is geweest die een DELETE statement heeft uitgevoerdquote: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
Geen enkel wachtwoord in geen enkele tabel van je CMS?quote:Op zaterdag 21 april 2012 14:23 schreef JDx het volgende:
[..]
Wachtwoorden staan er verder niet in volgens mij.
Dat zou ook kunnen? Oh god...quote: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
Als je input niet filtert en direct in een query gooit, kan iedereen elke query uitvoeren die 'ie maar wil.quote:
Dat lijkt alweer een stuk beterquote:Op zaterdag 21 april 2012 14:23 schreef JDx het volgende:
http://kledingmerken.jdx.nl/single.php?id=9%20or%201%3D1
Yup, en dingen inserten. Allemaal mogelijk. Maak daarom ook maar een backup van je database.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).quote:Op zaterdag 21 april 2012 14:23 schreef JDx het volgende:
http://kledingmerken.jdx.nl/single.php?id=9%20or%201%3D1
Zo te zien wordt nu intval() gebruikt. Dan krijg je 0 als je met tekst begint, niets spannends verder.quote: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).
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.quote: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.
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.quote:Op zaterdag 21 april 2012 14:26 schreef JDx het volgende:
Dus kan veel al beveiligen door die intval() toe te passen.
Wat is er toch ook een tuig op de wereld, ik zie altijd het goede, nooit de mogelijkheid om misbruik te maken.quote: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.
Dat maakt dus niet uit. Als het op dezelfde database draait, kan iedere malloot daar nu gewoon bij.quote: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.
Dan ben je wel heel naief.quote: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.quote: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.
Gewoon niet aan gedacht dat mensen er eventueel misbruik van kunnen maken.quote:
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).quote: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.
Creatief gebruik van het woord "gewoon".quote:Op zaterdag 21 april 2012 14:34 schreef JDx het volgende:
[..]
Gewoon niet aan gedacht dat mensen er eventueel misbruik van kunnen maken.
Nee ik ben aangenomen omdat alle programmeurs zijn gestopt of ontslagen. Ze hadden niemand meer die dit kon en konden niemand vindenquote: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.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |