[PHP/MySQL] SQL injectie voorkomen

Pagina: 1 2 3 4 Laatste
Acties:
  • 18.163 views

Onderwerpen


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

curry684 schreef op maandag 09 februari 2009 @ 17:01:
De Challenger explodeerde ook door een programmeerfoutje. Was ook geen excuus om iedere programmeertaal ter wereld inherent te beschermen met mechanismes om te voorkomen dat je er space shuttles mee kon opblazen.
Ah ja, de welbekende magic_spaceship_protection optie in PHP. Stond eerst default aan, maar nu blijkt dat er meer fouten mee gemaakt worden dan zonder hebben ze het maar weer default uit gezet. Net als al die andere zogenaamd "handige" features.

[ Voor 4% gewijzigd door .oisyn op 09-02-2009 17:14 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
curry684 schreef op maandag 09 februari 2009 @ 17:01:
De Challenger explodeerde ook door een programmeerfoutje. Was ook geen excuus om iedere programmeertaal ter wereld inherent te beschermen met mechanismes om te voorkomen dat je er space shuttles mee kon opblazen.
Inderdaad, een paar SQL of XSS leks meer of minder, wat maakt het allemaal uit, laten we vooral niet kijken of het misschien beter kan.
Gewoon de ontwikkelaar de schuld geven en klaar.

Wat was het probleem met de Challenger eigenlijk?
Ik weet bijna zeker dat ze wel maatregelen hebben gekomen om zoiets (zoveel mogelijk) te voorkomen in het vervolg.

[ Voor 19% gewijzigd door Olaf van der Spek op 09-02-2009 17:38 ]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Olaf van der Spek schreef op maandag 09 februari 2009 @ 17:28:
[...]

Gewoon de ontwikkelaar de schuld geven en klaar.
Eensch.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Olaf van der Spek schreef op maandag 09 februari 2009 @ 17:28:
Wat was het probleem met de Challenger eigenlijk?
In ieder geval geen SQL injection en al helemaal niet dankzij vage PHP zaken ;)
Challenger was destroyed in the second minute of STS-51-L, the orbiter's tenth mission, on January 28, 1986 at 11:38:00 a.m. EST ("51-L". http://science.ksc.nasa.g...ns/51-l/mission-51-l.html. ), when an O-ring seal on its right solid rocket booster (SRB) failed. The O-rings failed to seal due to a variety of factors, including unusually cold temperatures.[3] This failure allowed a plume of flame to leak out of the SRB and impinge on both the external fuel tank (ET) and SRB aft attachment strut. This caused both structural failure of the ET and the SRB pivoting into the orbiter and ET. The vehicle assembly then broke apart under aerodynamic loads.[4]
Had dus geen drol met software te maken; maar dat was het punt dan ook niet.

[ Voor 63% gewijzigd door RobIII op 09-02-2009 17:41 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Olaf van der Spek schreef op maandag 09 februari 2009 @ 14:51:
Ik vraag me toch nog even af, al die mensen die hier hebben gepost dat een betere standaard functie niet nodig is, gebruiken die inderdaad wel hun eigen veilige wrapper of gebruiken ze stieken toch direct mysql_query in combinatie met mysql_real_escape_string?
Ik vraag me eigenlijk meer af of je al eens mysqli en stored procedures gebruikt. :)
MOAW schreef op maandag 09 februari 2009 @ 17:07:
Ik heb zelf een variable class die op allerlij manier variablen kan filteren. Alle data die via GET of POST word opgehaald gaat hier eerst doorheen voordat het in de query beland.

Wat de class eigenlijk doet:
checken op INT
checken op Array > als het een array is > strip deze dan van alle overbodige tekens.
Wat is het voordeel ten opzichte van stored procedures? Welke tekens vind je overbodig?
RobIII schreef op maandag 09 februari 2009 @ 17:39:
Had dus geen drol met software te maken; maar dat was het punt dan ook niet.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
Olaf van der Spek schreef op maandag 09 februari 2009 @ 14:51:
nieuws: Hacker kraakt Kaspersky-website met sql-injectie

Ik vraag me toch nog even af, al die mensen die hier hebben gepost dat een betere standaard functie niet nodig is, gebruiken die inderdaad wel hun eigen veilige wrapper of gebruiken ze stieken toch direct mysql_query in combinatie met mysql_real_escape_string?
En hoe zeker zijn die ervan dat al hun code geen SQL lek bevat?
Ik heb zelf een soort van static class (of nouja dat kan niet in php, maar alle methods zijn static) die verschillende type input valideert (oa ook altijd wachtwoorden meteen verhaspelt naar sha1 zodat er ook nergens hardcoded wachtwoorden zijn. String data wordt ge-escaped met de mysql_real_escape functie. Ik bedenk me alleen net dat getallen wel gecontroleerd worden, maar als ze geen getallen zijn de conversie naar (int) misschien fout kan gaan :/ )

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En dat is de foute oplossing. :z Bij je input checks in het begin van je script hoort zeker wel het een en ander, maar sql context specifieke zaken hebben daar geen drol te zoeken. Bovendien ga je gewoon alsnog gruwelijk de boot in bij je queries. :z

Jouw input filter is gewoon een zelfgebouwde magic_quotes, inc. de nadelen. :w

{signature}


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

De oplossing is het gebruik maken (zeker bij enterprise websites zoals die van Kaspersky) van een O/R mapper. Ik werk aan een verwerkings- en dossier systeem voor financiele aanvraag (zowel verzekeringen als kredieten). Op het moment dat door een 'domme' fout als sql-injection ineens de volledige user tabel op straat ligt, dan sta ik direct op straat en is er een reële kans dat ik ook nog wordt vervolgd door enkele banken wegens nalatigheid en imago schade.

Op het moment dat je gebruik maakt van een O/R mapper kun je business en presentatie code doorzoeken middels grep (hooks in svn/cvs) op termen als 'mysql_' en 'mysqli_'. Ook XSS injection is zeer eenvoudig te voorkomen door de data al html-encoded in de database op te slaan. Op die manier kan een developer nooit vergeten het resultaat van een database opdracht html-encoded te presenteren. Vooral bij rapport overzichten heb ik helaas regelmatig XSS injections gezien. Dat wordt dan 'snel' opgelost door in de presentatie de data te encoden, maar het staat gewoon al fout in de database.

Maar bij hoeveel websites worden bij fouten op een productie omgeving ook geen informatieve gegevens getoond. PHP toont standaard bestandsnamen bij fouten (zoals recentelijk bij de timezone error op tweakers). Die geven een cracker waardevolle informatie. Asp.net toont gelukkig dat soort gegevens alleen als de browser gestart is op de webserver.

Net als bij associaties als dag en nacht, zwart en wit, light en zwaar, dik en dun, hoort bij een OO-design de associatie met een O/R mapper te zijn.

Het gaat er niet om of iemand een fout maakt of niet. Het gaat erom of de fout voorkomen had kunnen worden en er zijn ruim voldoende middelen om je te wapenen tegen sql-injection.

Daarbij heeft Mitre nog geen maand geleden de top 25 van meest voorkomende fouten op websites gepublished. Na het uitkomen van de lijst hebben wij drie weken uitgetrokken voor het controleren van de code aan het hand van de lijst.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
SQL injection is tegenwoordig een keuze (keuze voor een zeer laag veiligheidsniveau), je kunt het op database niveau onmogelijk maken. Wanneer een applicatie gevoelig is voor SQL injection, wordt de geinjecteerde SQL keurig afgekeurd met de mededeling dat er onvoldoende rechten zijn.

Zie ook dit artikel voor nadere uitleg. In MySQL zijn soortgelijke mogelijkheden, vrijwel iedere database kent dit soort mogelijkheden.

Even een één-tweetje tussen een DBA en een programmeur en je hebt nergens last van.

Edit:
De oplossing is het gebruik maken (zeker bij enterprise websites zoals die van Kaspersky) van een O/R mapper.
Dat is een workaround, voor iedere applicatie die van de database gebruik maakt, zul je weer een O/R mapper moeten opzetten. Alles staat of valt met de O/R mapper. Daarnaast legt de O/R mapper je flink wat beperkingen op, de database wordt dan zo goed of zo slecht als de O/R mapper is. Niet zo goed of slecht als de database is. Performance heeft ook flink te leiden onder O/R mappers, de SQL die daar uitkomt, is zelden van hoge kwaliteit of efficient. Wanneer je de queries in stored procedures en/of views zet, kun je vrij eenvoudig op database niveau de performance gaan optimaliseren, daar hoef je de applicatie niet mee lastig te gaan vallen. Heeft ook als voordeel dat direct alle applicaties daarvan profiteren, je hoeft niet iedere applicatie aan te gaan passen. Scheelt weer in de kosten.

[ Voor 45% gewijzigd door cariolive23 op 10-02-2009 10:52 ]


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 21:30

BCC

Mijn ORM mapper kan anders een stuk meer dan je SQL user oplossing. Hoe wil je hier omgaan met groepen met rechten? Of rechten die statefull veranderen? Al die logica wil ik niet in mijn database hebben, want dat is een kriem om te testen en dan wordt ik database afhankelijk (wat ik ook niet wil).

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
en dan wordt ik database afhankelijk (wat ik ook niet wil).
Dan is dat het enige argument om ORM te gebruiken, voor de veiligheid en beheerbaarheid hoef je het niet te doen.

Verder is het natuurlijk een eeuwige discussie tussen programmeurs en dba's wat nu de beste oplossing is. En ligt dat i.m.h.o. vooral aan de beschikbare kennis en capaciteit. Heb je geen (goede) DBA of niet voldoende uren van een DBA, dan kun je database oplossingen beter vergeten. Heb je geen (goede) programmeurs of niet voldoende uren voor de programmeurs, dan kun je beter gebruik gaan maken van de bestaande functionaliteit in de database.

Het is wel zo dat je met ORM-toepassingen alle voordelen van een specifieke database weggooid. Maar dat kan een keuze zijn.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Niemand_Anders schreef op dinsdag 10 februari 2009 @ 10:42:
Ook XSS injection is zeer eenvoudig te voorkomen door de data al html-encoded in de database op te slaan. Op die manier kan een developer nooit vergeten het resultaat van een database opdracht html-encoded te presenteren. Vooral bij rapport overzichten heb ik helaas regelmatig XSS injections gezien. Dat wordt dan 'snel' opgelost door in de presentatie de data te encoden, maar het staat gewoon al fout in de database.
Pertinent niet mee eens. Wat is je data? Is dat de tekst? Of is dat de html representatie van de tekst?

Pas op het moment dat je de gegevens gebruikt zul je ze in de vorm moeten gieten die op die plek nodig is. Als dat een HTML pagina is dan zul je dat html moeten encoden. Gebruik je het in een value van een input veld dan zul je misschien wel weer andere encoding moeten gebruiken. Gebruik je het in een word document dan zul je weer een andere conversie moeten gebruiken. Stuur je het per mail dan heb je waarschijnlijk helemaal geen conversie nodig voor het tekst deel en html encoding voor het html multipart deel.

De manier van encoden is afhankelijk van de plek waar je het gaat gebruiken en dat weet je pas op het moment dat je het daadwerkelijk aan het gebruiken bent. Je data html encoden voor het de database ingaat is net zo'n lompe oplossing als de magic_* meuk van php die alle input automatisch van add_slashes voorziet, zonder dat bekend is waarvoor die input gebruikt gaat worden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 21:30

BCC

Inderdaad, dit voelt als een oplossing van een doorgeslagen DBA die last heeft van incompetente frontend programmeurs :/. Problemen moet je op de goede plek oplossen.
Het is wel zo dat je met ORM-toepassingen alle voordelen van een specifieke database weggooid. Maar dat kan een keuze zijn.
Bijna geen enkele toepassing is zo complex dat je database specifieke spullen nodig hebt.

[ Voor 41% gewijzigd door BCC op 10-02-2009 13:20 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:26

Creepy

Tactical Espionage Splatterer

cariolive23 schreef op dinsdag 10 februari 2009 @ 12:46:
[...]

Het is wel zo dat je met ORM-toepassingen alle voordelen van een specifieke database weggooid. Maar dat kan een keuze zijn.
Er zijn ook ORM systemen die code genereren afhankelijk van de gebruikte database. Dat je alle voordelen van een specifieke database weggooit is dus zeker niet in alle gevallen waar. En niet te vergeten zijn er ook ORM systemen waar je alsnog eigen gemaakte queries kan gebruiken.

[ Voor 10% gewijzigd door Creepy op 10-02-2009 13:27 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Grappig, de inhoud van je post komt compleet overeen met een reactie die ik gisteren op de FP plaatste: .oisyn in 'nieuws: Hacker kraakt Kaspersky-website met sql-injectie' :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Janoz schreef op dinsdag 10 februari 2009 @ 13:17:
[...]

Pertinent niet mee eens. Wat is je data? Is dat de tekst? Of is dat de html representatie van de tekst?

Pas op het moment dat je de gegevens gebruikt zul je ze in de vorm moeten gieten die op die plek nodig is. Als dat een HTML pagina is dan zul je dat html moeten encoden. Gebruik je het in een value van een input veld dan zul je misschien wel weer andere encoding moeten gebruiken. Gebruik je het in een word document dan zul je weer een andere conversie moeten gebruiken. Stuur je het per mail dan heb je waarschijnlijk helemaal geen conversie nodig voor het tekst deel en html encoding voor het html multipart deel.
De data is tekst waarbij html representatie *NIET* is toegestaan. Zonder een (bewuste) aktie van de developer kan de tekst niet als HTML geparsed worden. In ons geval is XML ook de basis voor vrijwel elke presentatie laag. HTML spreekt voor zich, maar ook in xaml (ook gebruik in word 97). Via XSL-FO kan ik het ook omzetten naar een PDF bestand mocht dat nodig zijn.

Even voor de duidelijkheid: Ik heb het alleen over HTML encoding (encoding van '<' en '>'), niet character encoding (iso-8859-15, UFT-8, etc). In het uitzonderlijke geval dat de data letterlijk gebruikt zou worden, dient de developer op die plaats de html decode te gebruiken. Maar door het op voorhand html encode te gebruiken kan ik GARANDEREN dat XSS injectie bij onze system onmogelijk is. Andersom is dat helaas een stuk lastiger. En ik snap best dat het in de meeste gevallen gewoon goed zal gaan, maar op het moment dat er snel een overzichtje nodig is (marketing wil bijv. alle klanten reacties hebben) wordt net die html encode vergeten, en als er dan script tag in een van de reacties staat ben je gewoon de pineut. Want het gaat bijna altijd op dat soort moment fout. Op het moment dat de programmeur ergens 'Inkomen < 900' staat weet ie wel direct dat hij html decode moet gebruiken. Voorkomen is beter dan genezen, zeker in mijn werkgebied. Omdat intermediairs ook zelf onze software kunnen uitbreiden of integreren in hun eigen systemen hebben wij ook een bepaalde zorgplicht naar hun toe.

Aangezien wij ook actief zijn op de onder andere de Amerikaanse markt is onze software (middels broncode en documentatie) al meerdere malen door Homeland Security (DHS) en de SEC gecontroleerd. Dit omdat banking valt onder 'critical infrastructure and key resources'. De AFM en DNB voert dergelijke controles niet uit waardoor een hoop security issues bij de enkele banken voorkomen hadden kunnen worden (met de bij de Postbank).

Daarnaast hebben wij regelmatig overleg met een aantal belangen stichtingen in de Amerikaanse financiële wereld. Afgelopen november hebben wij van DHS de maximale score van 5 sterren behaald, alleen is helaas de financiële sector volledig ingestort zodat wij daar momenteel nog weinig profijt van hebben.

De controles van DHS zijn voornamelijk gebaseerd (+/- 70%) op de Common Weakness Enumeration (CWE). Ook security (en dan met name autorisatie en encryptie) vormt een belangrijk onderdeel van software scan, zo'n 20%. Omdat onze software gebaseerd is op het .NET framework van Microsoft hebben wij niet de volledige 100% kunnen behalen. In april zou 3.5 SP1 goedgekeurd moeten zijn door DHS. Op dat moment krijgen wij alsnog een certificaat met 100% score.


Ik deel je mening dat data op voorhand al html encoded op te slaan geen nette oplossing is, maar het is helaas in de praktijk wel de beste voorzorgs maatregel om XSS injectie te voorkomen. Overigens doen wij de html encoding alleen op velden waar een kleiner dan teken is toegestaan zoals een opmerkingen veld.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
BCC schreef op dinsdag 10 februari 2009 @ 13:20:
Inderdaad, dit voelt als een oplossing van een doorgeslagen DBA die last heeft van incompetente frontend programmeurs :/.
Het is de DBA die de schade mag gaan herstellen, vanuit zijn oogpunt gezien valt er wel wat voor te zeggen om op database niveau de boel dicht te spijkeren.
Problemen moet je op de goede plek oplossen.
Dat kunnen verschillende plaatsen zijn, afhankelijk van de problemen en de beschikbare kennis en capaciteit. De database is één van die mogelijkheden en dat lost direct het probleem op voor álle applicaties die van deze database gebruik maken. Dat kan een groot voordeel zijn, zeker in grotere organisaties.
Bijna geen enkele toepassing is zo complex dat je database specifieke spullen nodig hebt.
Vaak niet wanneer je het hebt over direct toepasbare functionaliteit, wel wanneer je het hebt over performance. In het genoemde PostgreSQL kun je bijvoorbeeld functionele indexen gebruiken, in MySQL gaat je dat niet lukken. Dat kan een slok op een borrel schelen.

Daarnaast vraag ik me dan af waarom databases dan blijkbaar zoveel (verschillende) functionaliteit nodig hebben, dat zal niet zijn omdat er geen vraag naar is...

Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Hoe je het dan ook in de code oplost, de meest gemaakte fout is nog steeds het 'vergeten' ofwel 'vertrouwen' van checkboxes en radio groups in html formulieren.
Het komt zoooo vaak voor dat de text type velden wel gevalideerd worden, maar deze niet.

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Het begin van je verhaal gaf me het gevoel dat je in een php omgeving aan de slag was, maar aangezien je aan het einde aangeeft dat je in een .NET omgeving bezig bent verbaast het me. De projecten waar ik op werk (JEE) is het encoden triviaal. een <h:output value="${variabele}" /> zorgt er automatisch voor dat het juist ge-encodeerd wordt. Je zult expliciet middels een escape="false" aan moeten geven wanneer je de data 'as-is' op het scherm wilt krijgen. Ook het gebruik in een formulierveld zorgt er automatisch voor dat de juiste escaping toegepast wordt.

Eigenlijk is het toch waanzin dat jullie data zo sterk gekoppeld is aan weergave in een (x|ht)ml omgeving? Zodra je het ergens anders gebruikt zul je eerst een decoding actie uit moeten halen gevolgd door een encoding actie. Ook wanneer je standaard tooling gebruikt die gewoon uitgaat van data as-is zit je met dubbel ge-escapte code.

Als je problemen hebt met marketing lui die snel iets gereleased wil hebben dan zul je de oplossing eerder in een goed geborgd (automatisch) test traject en tooling moeten zoeken lijkt mij.

[ Voor 55% gewijzigd door Janoz op 10-02-2009 15:31 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Niemand_Anders schreef op dinsdag 10 februari 2009 @ 14:59:
[...]

De data is tekst waarbij html representatie *NIET* is toegestaan.
Exact. "<b>hallo</b>" is gewoon tekst. Kan prima op die manier in de database. Je kunt het ook in HTML documenten gieten als je een document opbouwt mbv DOM - document.appendChild(document.createTextNode("<b>hallo</b>")) doet gewoon wat je wilt.

Enkel en alleen als je de HTML low-level op gaat bouwen als een string moet je ervoor zorgen dat speciale html tekens worden omgezet. Je database heeft daar echter geen ruk mee te maken - dat zit namelijk vóór de presentatielaag, voordat je überhaupt weet dat die data als lowlevel HTML uitgevoerd gaat worden.

Overigens vind ik het nogal raar dat je het bij de invoer wel kunt garanderen, maar bij de uitvoer niet.

[ Voor 6% gewijzigd door .oisyn op 10-02-2009 15:48 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Niemand_Anders schreef op dinsdag 10 februari 2009 @ 14:59:
Even voor de duidelijkheid: Ik heb het alleen over HTML encoding (encoding van '<' en '>'), niet character encoding (iso-8859-15, UFT-8, etc). In het uitzonderlijke geval dat de data letterlijk gebruikt zou worden, dient de developer op die plaats de html decode te gebruiken. Maar door het op voorhand html encode te gebruiken kan ik GARANDEREN dat XSS injectie bij onze system onmogelijk is. Andersom is dat helaas een stuk lastiger.
Ik zie toch wat gaten in deze garantie:
  • Zonder character encoding overal te specificeren weet je niet of html-encoding alles afdekt en goed gaat
  • Encodeer je &, " en ' ook? En dan nog kun je data verkeerd in een tag gebruiken (vb: je vergeet openende ' of " reeds in een tag)
  • Data kan direct van de client afkomstig zijn
  • Data kan niet langs de html encoding in de (andere externe) database gekomen zijn

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

pedorus schreef op dinsdag 10 februari 2009 @ 15:42:
Ik zie toch wat gaten in deze garantie:
Encodeer je &, " en ' ook? En dan nog kun je data verkeerd in een tag gebruiken (vb: je vergeet openende ' of " reeds in een tag)
Encoding gebeurt via het .NET framework. De ampersand wordt wel gecodeerd, maar de quote en apostrof niet.
Omdat alle database queries plaats vinden via parameterized queries, kan een apostofe of een dubbel minteken (-- = commentaar in veel db systemen) niet voor een sql-injectie zorgen.
Data kan direct van de client afkomstig zijn
Nee. Clients communiceren met business objecten. De business objecten communiceren met de data laag en die communiceert met een database. Het is de entity die controleert of html encoding nodig is voor de betreffende property en die wanneer nodig toepast. De controle hebben wij erg simpel gehouden. Zodra de tekst een kleiner dan teken bevat, is html encoding nodig. Dit voorkomt een eventuele dubbele encoding.

De machine die wij plaatsen (en beheren) bevat zowel de services als de database (sql2005 of hoger). Alleen de services kunnen via IP 127.0.0.1 met de database communiceren op basis van het user account waaronder de service draait. Deze users hebben geen lees rechten op de 'master' database of systeem views. Inloggen op het systeem kan alleen met een smartcard. Zodra de kast geopend wordt of iemand probeert via bijv. Terminal Services verbinding te maken met de machine, verstuurd deze een email naar ons en sluit de machine zichzelf af en de services zullen dienst weigeren tot de resetcode is ingevoerd. Deze code staat in een X.509 certificaat welke en is uniek voor elke machine.
Data kan niet langs de html encoding in de (andere externe) database gekomen zijn
Nee, want directe database to database communicatie is niet mogelijk. En op het moment dat de business objecten worden gebruikt doen de entities de controle of html encoding wel of niet nodig is.
[/quote]
Zonder character encoding overal te specificeren weet je niet of html-encoding alles afdekt en goed gaat
Dat weet ik juist wel, want in de SGML/XML documentatie is duidelijk vermeld het kleiner dan teken 0xC3 moet zijn en het groter dan teken 0x3E. In unicode blijven die waardes hetzelfde (hetzij dan U+00C3). dus de character encoding kan nooit voor een XSS-injection zorgen. Tekstuele data wordt bij ons in de database al in unicode opgeslagen (nvarchar, ntext, etc).
.oisyn schreef:
Overigens vind ik het nogal raar dat je het bij de invoer wel kunt garanderen, maar bij de uitvoer niet.
Doordat ik ervoor zorg de (html) input op een veilige manier op te slaan in de database, kan ik dus garanderen dat de output geen XSS-injectie kan veroorzaken. Een XSS-injectie is alleen mogelijk als een developer bewust een functie als html_decode gebruikt. En daar kan ik natuurlijk nooit verantwoordelijkheid voor nemen. Echter staat in de development documentatie voor de klant uitdrukkelijk beschreven dat het gebruik van html_decode mogelijk een XSS injectie kan veroorzaken.

En nogmaals, de html encoding vind plaats op 8 velden in de gehele database (welke 220 tabellen bevat). Alle andere velden mogen gewoon geen kleiner dan teken bevatten en zal anders niet door de validatie komen.

Mocht het nog niet helemaal duidelijk zijn geworden. Wij bouwen geen websites, wij bouwen financiële componenten/services welke intermediairs en banken kunnen gebruiken in hun system of hun website Via het Windows Communication Framework zijn de business objecten (via services) benaderbaar via o.a. .net remoting, soap en tcp.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Niemand_Anders schreef op woensdag 11 februari 2009 @ 11:39:
Doordat ik ervoor zorg de (html) input op een veilige manier op te slaan in de database, kan ik dus garanderen dat de output geen XSS-injectie kan veroorzaken. Een XSS-injectie is alleen mogelijk als een developer bewust een functie als html_decode gebruikt. En daar kan ik natuurlijk nooit verantwoordelijkheid voor nemen. Echter staat in de development documentatie voor de klant uitdrukkelijk beschreven dat het gebruik van html_decode mogelijk een XSS injectie kan veroorzaken.

En nogmaals, de html encoding vind plaats op 8 velden in de gehele database (welke 220 tabellen bevat). Alle andere velden mogen gewoon geen kleiner dan teken bevatten en zal anders niet door de validatie komen.
Nog steeds blijft mijn opmerking staan: ik vind het raar dat je dat wel bij de input kan garanderen, maar bij de output niet. Blijkbaar heb je een validatielaag vlak voor de db hangen zodat je die garanties kunt maken (zo niet dan kan er altijd nog foute input tussendoor glippen). Je kunt toch ook net zo goed een conversielaag bij de uitgang van de db hebben?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Niemand_Anders schreef op dinsdag 10 februari 2009 @ 10:42:
Ook XSS injection is zeer eenvoudig te voorkomen door de data al html-encoded in de database op te slaan. Op die manier kan een developer nooit vergeten het resultaat van een database opdracht html-encoded te presenteren. Vooral bij rapport overzichten heb ik helaas regelmatig XSS injections gezien. Dat wordt dan 'snel' opgelost door in de presentatie de data te encoden, maar het staat gewoon al fout in de database.
Nee het staat goed in de database, want in je database moet cleane data staan die niet alleen geschikt is om als HTML te renderen, maar ook als .doc, PDF, powerpoint, textfiles, log, care, whatever.

Zodra je de inhoud van je database gaat optimaliseren naar je presentatielayer overtreedt je regels 1 t/m 254 van de MVC-concepten.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Niemand_Anders schreef op woensdag 11 februari 2009 @ 11:39:
Encoding gebeurt via het .NET framework. De ampersand wordt wel gecodeerd, maar de quote en apostrof niet.
Oh, je gaat er dus vanuit dat de data nooit in bijvoorbeeld scripts, abbr-tags of param-tags wordt gezet?
Nee. Clients communiceren met business objecten. De business objecten communiceren met de data laag en die communiceert met een database. Het is de entity die controleert of html encoding nodig is voor de betreffende property en die wanneer nodig toepast.
En wat nu als je een goede foutmelding wil teruggeven waarom je geen business object kan maken? Of als een programmeur zich op een andere manier niet aan deze regel houdt?
De controle hebben wij erg simpel gehouden. Zodra de tekst een kleiner dan teken bevat, is html encoding nodig. Dit voorkomt een eventuele dubbele encoding.
En bij alleen &, ", ' of >'s encodeer je gewoon niks, maar decodeert de browser wel...
Dat weet ik juist wel, want in de SGML/XML documentatie is duidelijk vermeld het kleiner dan teken 0xC3 moet zijn en het groter dan teken 0x3E. In unicode blijven die waardes hetzelfde (hetzij dan U+00C3). dus de character encoding kan nooit voor een XSS-injection zorgen. Tekstuele data wordt bij ons in de database al in unicode opgeslagen (nvarchar, ntext, etc).
Assumption is the mother of ... :) En daarnaast kun je je data zo verminken...

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

pedorus schreef op woensdag 11 februari 2009 @ 17:38:
"Encoding gebeurt via het .NET framework. De ampersand wordt wel gecodeerd, maar de quote en apostrof niet."

Oh, je gaat er dus vanuit dat de data nooit in bijvoorbeeld scripts, abbr-tags of param-tags wordt gezet?
Omdat de data by default als html encoded wordt opgeslagen in de database moet de programmeur bewust html_decode gebruiken om het als html te laten tonen. Dit in tegenstelling tot wat gebruikelijk is dat de programmeur ervoor moet zorgen dat het *NIET* als html wordt getoond. De data wordt inderdaad nooit in scripts gebruikt wat het betreffen hier opmerkingen en/of vragen. Dat is content en klanten leveren geen content aan.

Even een vraag zoals die gesteld kan worden door een bezoeker:
Graag zou ik willen <script src="http://evildomain.ru/takeover.js"></script> weten wat mijn leen mogelijkheden zijn.

Iedereen zal het ermee eens zijn dat het script nooit uitgevoerd mag worden. Dit kun je op twee manieren oplossen:
1) Via html_encode op *ELKE* plaats waar maar het commentaar getoond dient te worden met als groot risico dat het ergens vergeten wordt (want daarom bestaan XSS-injecties voornamelijk, want elke web developer probeert het te voorkomen).
2) Aanpakken bij de bron, en dat is de invoer.

Ik geef hier juist als voorbeeld een opmerkingen veld want dat is nou typisch zo'n veld wat je niet echt kunt valideren.

Wij hebben bewust gekozen voor optie 2. Daardoor zal bij het ophalen van de vraag de response automatisch html encoded zijn. Als het gewenst is dat de vragen naar een CSV bestand worden geexporteerd, dan zal de programmeur inderdaad html_decode moeten gebruiken. Teksten van klanten behoren niet in javascripts voor te komen.
"Nee. Clients communiceren met business objecten. De business objecten communiceren met de data laag en die communiceert met een database. Het is de entity die controleert of html encoding nodig is voor de betreffende property en die wanneer nodig toepast."

En wat nu als je een goede foutmelding wil teruggeven waarom je geen business object kan maken? Of als een programmeur zich op een andere manier niet aan deze regel houdt?
Je eerste vraag begrijp ik niet helemaal. Als een third party geen instantie van ons component kan maken, dan komt toch ook de foutmelding niet bij ons vandaan? Alle akties welke betrekking hebben op opslaan, wijzigen of verwijderen van records geven een boolean terug. Of het is gelukt of niet. 'Het is misschien gelukt' bestaat niet. In de logging staat gedetailleerd beschreven waarom een aktie is mislukt.

Het antwoord op vraag 2 is vrij simpel. Gebruikers van onze software kunnen alleen communiceren met de business laag. Want alleen de componenten uit de business laag zijn als services ter beschikking gesteld. Geen uitzonderingen mogelijk.
"De controle hebben wij erg simpel gehouden. Zodra de tekst een kleiner dan teken bevat, is html encoding nodig. Dit voorkomt een eventuele dubbele encoding."
En bij alleen &, ", ' of >'s encodeer je gewoon niks, maar decodeert de browser wel...
Leg mij maar eens uit hoe jij HTML kan schrijven zonder gebruik van het kleiner dan (<) teken..
'Gisteren zei iemand tegen mij: "Doe eens de test a > b"' 
klik a href="http://tweakers.net">hier/a>

Bovenstaande regels leveren zonder html encoding ook geen probleem op.
"Dat weet ik juist wel, want in de SGML/XML documentatie is duidelijk vermeld het kleiner dan teken 0xC3 moet zijn en het groter dan teken 0x3E. In unicode blijven die waardes hetzelfde (hetzij dan U+00C3). dus de character encoding kan nooit voor een XSS-injection zorgen. Tekstuele data wordt bij ons in de database al in unicode opgeslagen (nvarchar, ntext, etc)."
Assumption is the mother of ... :) En daarnaast kun je je data zo verminken...
Ik heb via PHP en SOAP een testje gedaan door het commentaar als UTF-7 naar de service te sturen. Bij het presenteren van het commentaar in een online backoffice (zowel getest met MSIE als Firefox) was de output onuitvoerbaar: Graag zou +ADw-script+AD4-alert('XSS')+ADsAPA-/script+AD4-. ik willen weten.

Bovenstaand zou wel een probleem zijn als de server geen encoding meestuurt of deze op UTF-7 zou zetten. In het eerste geval doet de browser zelf de detectie. Pas op het moment dat ik handmatig via de browser (menu) de encoding op UTF-7 had gezet kreeg ik pas de popup.

Overigens heeft het kleiner dan teken in UTF-7 nog steeds code C3. Echter als de encoding in een andere encoding getoond wordt kan deze anders gepresenteerd worden. Wel moet ik bekennen dat ik deze vorm van XSS-injectie niet kende. Maar als je in het voorbeeld van google bij de header aangeeft dat encoding utf-8 is (ipv utf-7) gaat het ook niet meer fout..

Overigens zijn Amerikaanse financiële intermediairs verplicht melding bij DHS (Department of Homeland Security) te maken als zij een vermoeden hebben dat iemand bezig is met sql en/of xss injectie. Omdat intermediairs direct communiceren met banken en verzekeraars worden dergelijke aanvallen gezien als cyber terrorisme. Immers dergelijk maatschappijen vallen onder kritische infrastructuur.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Niemand_Anders schreef op donderdag 12 februari 2009 @ 11:30:
Iedereen zal het ermee eens zijn dat het script nooit uitgevoerd mag worden. Dit kun je op twee manieren oplossen:
1) Via html_encode op *ELKE* plaats waar maar het commentaar getoond dient te worden met als groot risico dat het ergens vergeten wordt (want daarom bestaan XSS-injecties voornamelijk, want elke web developer probeert het te voorkomen).
2) Aanpakken bij de bron, en dat is de invoer.
Alsof er zoveel meer plekken zijn waar outputdata wordt geprepareerd dan inputdata wordt geparsed in een goed opgezette applicatie :z Het verschil tussen escapen in postback-comment of render-comment is enkel lamheid van jou als developer en het opzettelijk verkrachten en ongeschikt maken voor non-HTML output van je database, plus schijnveiligheid omdat oplossing 1 alle vormen van invoer (denk imports, denk direct access) afvangt en oplossing 2 enkel malicious end-users.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
In het kort (en iets degelijks heb ik echt al 50x gezegd @ got): Encoding is context afhankelijk, dus doe het *(&$^$^@$W nou eens in de goede context.

Een aanpak zoals die van Niemand_Anders is minstens zo lastig (ik zou zelfs zeggen lastiger) om goed te doen, en in het 'beste' geval heb je je eigen magic_quotes gebouwd. Als je het probleem van magic quotes begrijpt, moet je ook begrijpen dat deze tactiek dezelfde fundamentele flaws heeft... :>

{signature}


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Niemand_Anders schreef op donderdag 12 februari 2009 @ 11:30:
[...]
Iedereen zal het ermee eens zijn dat het script nooit uitgevoerd mag worden. Dit kun je op twee manieren oplossen:
1) Via html_encode op *ELKE* plaats waar maar het commentaar getoond dient te worden met als groot risico dat het ergens vergeten wordt (want daarom bestaan XSS-injecties voornamelijk, want elke web developer probeert het te voorkomen).
2) Aanpakken bij de bron, en dat is de invoer.
3) Aanpakken bij het probleem, en dat is de uitvoer van de dbase...

Ik gebruik zelf gewoon een db-layer waar ik een output formaat in op kan geven, geef je daarin html op dan wordt het encoded, geef je xml op dan wordt het ook encoded.

Gewoon in de db-layer zetten, dan is alle output gelijk en je vernaggeld niets aan je feitelijke gegevens...

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Gomez12 schreef op vrijdag 13 februari 2009 @ 09:45:
[...]

3) Aanpakken bij het probleem, en dat is de uitvoer van de dbase...

Ik gebruik zelf gewoon een db-layer waar ik een output formaat in op kan geven, geef je daarin html op dan wordt het encoded, geef je xml op dan wordt het ook encoded.

Gewoon in de db-layer zetten, dan is alle output gelijk en je vernaggeld niets aan je feitelijke gegevens...
Maar waarom leg je die verantwoordelijkheid dan bij de DB? Het is toch de verantwoordelijkheid van je UI Layer.

dus ik zou kiezen
4) Aanpakken bij het probleem, en dat is de uitvoer naar je HTML.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Uitvoer van je db naar html is precies wat ik ook bedoel. Ik leg de verantwoordelijkheid niet perse bij de db, maar bij de db-laag.

De uiteindelijke uitvoer naar html is imho een veels te laag niveau, dan moet je op applicatieniveau in 100'en files rekening houden met de juiste encoding etc. Bouw het 1x goed in de db-layer in en het komt gewoon goed.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En als je iets met de data die uit de db doet welke niet direct met een html context te maken heeft mag je weer decoden? Je blijft hetzelfde probleem hebben, plus dat niet alle input langs de db laag komt, etc. etc. :z

* Voutloos vraagt zich af, of dit topic wel zin heeft. Je kan er nog een paar honderd reacties tegen aan gooien (hoeveelheid unieke argumenten in dit topic is al zeer beperkt, deze 230 posts is al steeds een herhaling van zetten), maar blijkbaar zien sommigen het gewoon echt niet...

{signature}


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Gomez12 schreef op vrijdag 13 februari 2009 @ 11:49:
Uitvoer van je db naar html is precies wat ik ook bedoel. Ik leg de verantwoordelijkheid niet perse bij de db, maar bij de db-laag.
Maar meestal is het niet de DB-laag die direct naar HTML output.
De uiteindelijke uitvoer naar html is imho een veels te laag niveau, dan moet je op applicatieniveau in 100'en files rekening houden met de juiste encoding etc. Bouw het 1x goed in de db-layer in en het komt gewoon goed.
Waarom zou je bij een DB wel altijd op kunnen letten dat je de juiste methode gebruikt, maar in de UI laag niet? Want je zal er ook in je DB laag nog op moeten letten, immers niet alles wat uit je DB komt moet encoded worden. Als je controls gewoon zorgen dat bij het outputten de data encoded word heb je geen probleem meer. Uiteindelijk weet je pas op het moment van outputten wat het exacte doel is, en dus daar kun je pas goed bepalen of het encoded moet worden of niet.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

@Voutloos: Lees anders even goed voor je reageert
Ik gebruik zelf gewoon een db-layer waar ik een output formaat in op kan geven

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dan nog gaat niet alles door je db-layer. En een output formaat parameter is een goed idee, maar dan wel gewoon in een presentatie layer. :Y)

(en je ontkracht niet volledig mijn eerste argument, want soms haal je data op die zowel wilt bewerken in je programma als representeren in html)

[ Voor 34% gewijzigd door Voutloos op 13-02-2009 12:30 ]

{signature}


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik zeg niet dat z'n design nou verder zo fantastisch is, ik ontkracht alleen maar je eerste argument uit jouw post.

Oh ja: :z en :Y)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Niemand_Anders schreef op donderdag 12 februari 2009 @ 11:30:
Even een vraag zoals die gesteld kan worden door een bezoeker:
Graag zou ik willen <script src="http://evildomain.ru/takeover.js"></script> weten wat mijn leen mogelijkheden zijn.
Ik heb een ander voorbeeld voor je, leuk voor bijv. in een abbr-tag:
code:
1
Graag zou ik willen weten wat mijn leen mogelijkheden zijn." onclick="alert('XSS')" bla="
Je eerste vraag begrijp ik niet helemaal. Als een third party geen instantie van ons component kan maken, dan komt toch ook de foutmelding niet bij ons vandaan?
Nou ja, voor je het weet programmeert iemand een foutmelding van het type "kan object niet aanmaken met tekst [xss-injection]".
Leg mij maar eens uit hoe jij HTML kan schrijven zonder gebruik van het kleiner dan (<) teken..
Zie boven voor een mogelijke xss-injection. Daarnaast wordt bijvoorbeeld "test &amp;" nu fout gedecodeerd.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 21:30

BCC

IE voert bijvoorbeeld al javascript uit in CSS. Dus het gaat niet alleen om nieuwe code, maar ook code in bestaande attributen.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Even een subtiel kickje. Is iedereen nog steeds van mening dat dit maar aan individuele developers moet worden overgelaten?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Welke recente paradigmashift zou je verantwoordelijk willen houden voor het substantieel veranderen van de algemene tendens/mening in dit topic? Volgens mij is er niets veranderd.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wellicht doelt ie op het exploderend aantal hackberichten in de media?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
Als je je code gaat opslitsen (MVC) en je meerdere databases wilt ondersteunen, heb je dus eigenlijk al een extra methode gemaakt. Nuja dan krijg je toch gewoon te maken met façades, factory, singleton etc. Trouwens waarom blijven zeuren over die wrapper functies etc, kies gewoon een goed framework dat doet dit allemaal voor je. Het is niet aan php om dit te regelen, want iedereen heeft een andere achtergrond en een andere kijk op de zaken. Schrijf je eigen wrapper functie of gebruik een framework als codeigniter.

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Lost CodeIgniter dan ook automatisch XSS en CSRF op? Denk het niet...

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Precision schreef op zondag 13 november 2011 @ 10:49:
Schrijf je eigen wrapper functie of gebruik een framework als codeigniter.
Is het na zoveel jaar niet eens tijd om te concluderen dat dat *niet* werkt?

Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
Olaf van der Spek schreef op zondag 13 november 2011 @ 11:16:
[...]

Is het na zoveel jaar niet eens tijd om te concluderen dat dat *niet* werkt?
Wat houd je tegen om zelf een oplossing te schrijven en deze aan te reiken aan php dan? In al de tijd dat je hier loopt te zagen had je al lang een oplossing kunnen verzinnen... Gebruik dan een andere taal als php je niet aanstaat. Als je alles beter weet, doe dan iets constructiefs met je tijd?

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Precision schreef op zondag 13 november 2011 @ 14:00:
[...]

Wat houd je tegen om zelf een oplossing te schrijven en deze aan te reiken aan php dan? In al de tijd dat je hier loopt te zagen had je al lang een oplossing kunnen verzinnen... Gebruik dan een andere taal als php je niet aanstaat. Als je alles beter weet, doe dan iets constructiefs met je tijd?
Het probleem is dat php er niets mee te maken heeft, php maakt net zo lief een csv-output als een html-output.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Precision schreef op zondag 13 november 2011 @ 14:00:
[...]

Wat houd je tegen om zelf een oplossing te schrijven en deze aan te reiken aan php dan? In al de tijd dat je hier loopt te zagen had je al lang een oplossing kunnen verzinnen... Gebruik dan een andere taal als php je niet aanstaat. Als je alles beter weet, doe dan iets constructiefs met je tijd?
Dat heeft niks met PHP te maken, elke willekeurige andere taal heeft er net zo goed mee te maken. Veiligheid hangt gewoon af van de programmeur die het bouwt. Je kan nog zulke goede tools aangeboden krijgen, als je te lui bent om ze te gebruiken ben je net zo vatbaar.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Olaf van der Spek schreef op zondag 13 november 2011 @ 11:16:
[...]

Is het na zoveel jaar niet eens tijd om te concluderen dat dat *niet* werkt?
Voor wie werkt het niet dan? Ik zal niet zeggen dat ons framework onhackbaar is want dat kan geen enkele ontwikkelaar garanderen. Maar als je als developer weet wat je doet kan het allemaal best werken. Het probleem is dat te veel developers geen flauw idee hebben van wat ze eigenlijk aan het doen zijn. Van die mensen die bij bedrijven werken die niets aan scholing of persoonlijke ontwikkeling doen, of van die bedrijven dan mensen in een hokje duwen waar ze code moeten kloppen die nooit eens gereviewed wordt. Vooral in Amerika met die gruwelijke cubicle-structuur heeft daar echt problemen.

Het probleem zit hem niet in bestaande technieken, het probleem zit hem in de trucklading programmeurs die geen flauw idee heeft van wat SQL-injectie is en hoe je het verkomt, en waarom HTML-injectie voorkomen moet worden. Daar zul je toch echt als bedrijf iets aan moeten doen, niet als taal/omgevingsontwikkelaar.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Precision schreef op zondag 13 november 2011 @ 14:00:
Wat houd je tegen om zelf een oplossing te schrijven en deze aan te reiken aan php dan?
Bij PHP zijn ze net zo koppig als hier...
In al de tijd dat je hier loopt te zagen had je al lang een oplossing kunnen verzinnen... Gebruik dan een andere taal als php je niet aanstaat. Als je alles beter weet, doe dan iets constructiefs met je tijd?
Het gaat niet om mij. Had je dat nog niet door?
Volg je het nieuws niet? Er komen tig SQL injecties voorbij. Kun je wel hard roepen dat het de fout van developers is, maar dat lost het probleem niet op. Of wel?
Ik zal niet zeggen dat ons framework onhackbaar is want dat kan geen enkele ontwikkelaar garanderen. Maar als je als developer weet wat je doet kan het allemaal best werken. Het probleem is dat te veel developers geen flauw idee hebben van wat ze eigenlijk aan het doen zijn.
Vind je het raar? Bekijk bijvoorbeeld http://php.net/mysql_query eens. Geen enkele waarschuwing dat het beter is om deze functie niet (direct) te gebruiken.
Of http://php.net/manual/en/...ql-real-escape-string.php
Alweer niks.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

De enige échte manier om dit soort dingen te voorkomen is om de programmeur gewoon geen directe toegang te geven tot het protocol, in dit geval dus stringbewerkingen op SQL statements, en in het geval van XSS dus geen HTML opbouwen mbv strings. Voor SQL zou je een LINQ-achtige API kunnen gebruiken. In het geval van HTML zou je louter met de DOM moeten werken. Maar of dat ook prettig is (zeker in het geval van HTML) is maar de vraag. En dan nog moet je er goed over nadenken. Bijvoorbeeld op een forum moet je alsnog filteren op dingen als javascript URI's in [url] en [img] tags - daar gaat geen DOM API of template systeem je tegen beschermen.

[ Voor 19% gewijzigd door .oisyn op 14-11-2011 22:59 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
.oisyn schreef op maandag 14 november 2011 @ 22:56:
Maar of dat ook prettig is (zeker in het geval van HTML) is maar de vraag.
Een fatsoenlijk template systeem (met auto escaping) doet wonderen en werkt erg prettig.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik had er net een zinnetje bij geëdit. Alleen daarmee ben je er dus nog niet.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
.oisyn schreef op maandag 14 november 2011 @ 22:56:
Maar of dat ook prettig is (zeker in het geval van HTML) is maar de vraag. En dan nog moet je er goed over nadenken. Bijvoorbeeld op een forum moet je alsnog filteren op dingen als javascript URI's in [url] en [img] tags - daar gaat geen DOM API of template systeem je tegen beschermen.
Niet iedereen hoeft zijn eigen bbcode parser te schrijven.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Olaf van der Spek schreef op maandag 14 november 2011 @ 22:51:
[...]

Volg je het nieuws niet? Er komen tig SQL injecties voorbij. Kun je wel hard roepen dat het de fout van developers is, maar dat lost het probleem niet op. Of wel?
Dus omdat een aantal grote bedrijven gehackt is door al dan niet lekke software (zowel de LOTRO- als Steam-hacks van de afgelopen 2 maanden kwamen door brakke installaties van vBulletin) vind je dat een taal - neem PHP even als voorbeeld - een lading kracht moet weg nemen uit zijn toolset omdat een aantal lutsers er niet mee overweg kan? Waarom moet andermans onkunde ten koste van mijn toolset gaan?
Vind je het raar? Bekijk bijvoorbeeld http://php.net/mysql_query eens. Geen enkele waarschuwing dat het beter is om deze functie niet (direct) te gebruiken.
Of http://php.net/manual/en/...ql-real-escape-string.php
Alweer niks.
Waarom is brakke documentatie reden om de functionaliteit dan maar te schrappen? Er loopt gewoon een lading onkundige developers rond en het is niet de taak van een taal, ontwikkelomgeving of framework om dat te compenseren. Het is aan de (veelal grote) bedrijven om dat soort onkunde te herkennen en af te straffen. En dan hebben we het er nog niet eens over dat het niet per se onkunde is maar mogelijk gewoon een probleem bij het testen.

Je kan niet alles afvangen. Je kan dat wel een doel maken, maar uiteindelijk neem je met een groot deel van je coderegels nou eenmaal een risico. Dat risico op taalniveau inperken beperkt de mensen die er wél mee om kunnen gaan dusdanig dat het geen goede wijziging zou zijn. Niet in de laatste plaats omdat dat niet backwards compatible zou zijn en dús mensen ervan gaat weerhouden om hun PHP-versie te upgraden, domweg om hun legacy code draaiend te kunnen houden. Dan zit je dus niet alleen met het risico dat je in de eerste instantie juist weg wilde werken, maar je zit ook nog eens met het extra risico dat exploits in PHP zelf niet gepatcht gaan worden.

Even ter indicatie: de LOTRO-forums draaiden een verouderde 4.0-versie van vBulletin met daarin allerlei mods en addons. Resultaat: geen upgrades. Toen ze gehackt werden was versie 4.1.nogwat uit en ze hebben gewoon een lading patches gemist omdat ze die mods niet wilden breken. Dat is de angst die bedrijven hebben om spul stuk te maken, en dat gaat ten koste van patches. Dát is een groter probleem dan daadwerkelijk slechte code.
Olaf van der Spek schreef op maandag 14 november 2011 @ 23:20:
[...]

Niet iedereen hoeft zijn eigen bbcode parser te schrijven.
Nee, maar volgens jouw argumentatie mag niemand het ook want er zou wel iemand eens een XSS-vulnerability met die functionaliteit kunnen introduceren.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Olaf van der Spek schreef op maandag 14 november 2011 @ 22:51:
[...]
Vind je het raar? Bekijk bijvoorbeeld http://php.net/mysql_query eens. Geen enkele waarschuwing dat het beter is om deze functie niet (direct) te gebruiken.
Of http://php.net/manual/en/...ql-real-escape-string.php
Alweer niks.
Maar waarom zou je daar een waarschuwing willen hebben?
Het zou enkel een "nep-waarschuwing" zijn.

De functie is niet fout, het gebruik is fout.
Olaf van der Spek schreef op maandag 14 november 2011 @ 22:58:
[...]
Een fatsoenlijk template systeem (met auto escaping) doet wonderen en werkt erg prettig.
In veel gevallen zal het wonderen doen (als een template maar 1 uitvoer heeft) maar in een aantal gevallen zal het net zo'n draak zijn als magic_quotes.
Ik ken genoeg gevallen waarbij er bijv een artikel-template in een pagina-template zit. Dan wil je echt op artikel-template niveau geen escaping doen

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
NMe schreef op maandag 14 november 2011 @ 23:26:
Dus omdat een aantal grote bedrijven gehackt is door al dan niet lekke software (zowel de LOTRO- als Steam-hacks van de afgelopen 2 maanden kwamen door brakke installaties van vBulletin) vind je dat een taal - neem PHP even als voorbeeld - een lading kracht moet weg nemen uit zijn toolset omdat een aantal lutsers er niet mee overweg kan? Waarom moet andermans onkunde ten koste van mijn toolset gaan?
Wie heeft het over het schrappen van functies?
Nee, maar volgens jouw argumentatie mag niemand het ook want er zou wel iemand eens een XSS-vulnerability met die functionaliteit kunnen introduceren.
Waar zeg ik dat low-level interfaces verwijderd moeten worden?
Ben je een stroman aan het bouwen? :p
Het gaat niet om een paar specifieke hacks maar om SQL injectie in het algemeen.
Gomez12 schreef op maandag 14 november 2011 @ 23:33:
[...]

Maar waarom zou je daar een waarschuwing willen hebben?
Het zou enkel een "nep-waarschuwing" zijn.

De functie is niet fout, het gebruik is fout.
Omdat het (direct) gebruik van deze functie vrijwel altijd fout is.
In veel gevallen zal het wonderen doen (als een template maar 1 uitvoer heeft) maar in een aantal gevallen zal het net zo'n draak zijn als magic_quotes.
Ik ken genoeg gevallen waarbij er bijv een artikel-template in een pagina-template zit. Dan wil je echt op artikel-template niveau geen escaping doen
Blijkbaar heb jij geen goed template systeem. Dat is echt een non-issue.

[ Voor 28% gewijzigd door Olaf van der Spek op 15-11-2011 00:34 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Olaf van der Spek schreef op dinsdag 15 november 2011 @ 00:33:
[...]

Wie heeft het over het schrappen van functies?

[...]

Waar zeg ik dat low-level interfaces verwijderd moeten worden?
Ben je een stroman aan het bouwen? :p
Niet bewust ik elk geval. :) Wat is dán de oplossing die je voor ogen hebt voor het probleem dat je constateert?
Olaf van der Spek schreef op dinsdag 15 november 2011 @ 00:33:
Blijkbaar heb jij geen goed template systeem. Dat is echt een non-issue.
Met het risico offtopic te gaan: dat heeft niks met de kwaliteit van het templatesysteem te maken. Er zijn situaties denkbaar waarbij je juist je spul niet wil escapen omdat er HTML in moet zitten, terwijl er ook situaties zijn waarin je dat wel wil. Domweg de aanname maken dat je altijd maar moet escapen omdat dat minder problemen veroorzaakt gaat voor iemand die wél weet wat hij doet juist méér problemen veroorzaken.

[ Voor 43% gewijzigd door NMe op 15-11-2011 01:05 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Olaf van der Spek schreef op maandag 14 november 2011 @ 23:20:
[...]

Niet iedereen hoeft zijn eigen bbcode parser te schrijven.
Ga je nu specifiek op mijn voorbeeld reageren zonder even aan the bigger picture te denken? Alleen bb-code genereert user-generated links?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
NMe schreef op dinsdag 15 november 2011 @ 01:03:
Niet bewust ik elk geval. :) Wat is dán de oplossing die je voor ogen hebt voor het probleem dat je constateert?
Het toevoegen van een veilige wrapper. Iedereen adviseren (in de documentatie) niet mysql_query() (direct) te gebruiken.
Met het risico offtopic te gaan: dat heeft niks met de kwaliteit van het templatesysteem te maken. Er zijn situaties denkbaar waarbij je juist je spul niet wil escapen omdat er HTML in moet zitten, terwijl er ook situaties zijn waarin je dat wel wil. Domweg de aanname maken dat je altijd maar moet escapen omdat dat minder problemen veroorzaakt gaat voor iemand die wél weet wat hij doet juist méér problemen veroorzaken.
Onzin. Ook dat is in een goed template systeem prima te doen. Alweer geldt: safe by default. Maar wil je een keer iets niet automatisch escapen, dan is dat geen enkel probleem.
.oisyn schreef op dinsdag 15 november 2011 @ 01:38:
Ga je nu specifiek op mijn voorbeeld reageren zonder even aan the bigger picture te denken? Alleen bb-code genereert user-generated links?
Nee, je hebt gewoon gelijk, dat blijft een issue natuurlijk. Als je automatisch escapen uitzet voor een veld, ben je zelf verantwoordelijk voor validatie / escapen.

[ Voor 20% gewijzigd door Olaf van der Spek op 15-11-2011 01:52 ]


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 15-09 09:10
NMe schreef op dinsdag 15 november 2011 @ 01:03:
[...]

Met het risico offtopic te gaan: dat heeft niks met de kwaliteit van het templatesysteem te maken. Er zijn situaties denkbaar waarbij je juist je spul niet wil escapen omdat er HTML in moet zitten, terwijl er ook situaties zijn waarin je dat wel wil. Domweg de aanname maken dat je altijd maar moet escapen omdat dat minder problemen veroorzaakt gaat voor iemand die wél weet wat hij doet juist méér problemen veroorzaken.
Alhoewel ik ook niet te ver off-topic wil gaan, vind ik wel dat escapen ook iets met veiligheid te maken heeft. Zo heb ik op de mobiele GoT site de topics zelf niet geëscaped omdat Tweakers mooie HTML aanlevert welke wel behouden moet blijven, anders krijg je in de meeste gevallen een hoop rare - in context - tekens, waar niemand iets aan heeft.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Olaf van der Spek schreef op dinsdag 15 november 2011 @ 01:39:
[...]
Het toevoegen van een veilige wrapper. Iedereen adviseren (in de documentatie) niet mysql_query() (direct) te gebruiken.
Die veilige methodes zjin er ook gewoon maar niet iedereen gebruikt het. Hoe vaak zien we hier geen topics voorbij komen van users die code tonen die zo lek is als een mandje? Vaak. En hoe vaak zien we staan "is alleen voor intern" of "er is maar 1 iemand die het gebruikt". Die developers weten er dus van maar zijn te lui om hun spul te beveiligen. Dan kun je op mysql_query dus makkelijk een warning neerprakken maar zulk soort developers negeren dat toch, heeft gewoon weinig zin imo.

En mysql_query is niet per definitie fout. Als je query geen parameters bevat zie ik geen enkele reden om het niet te gebruiken.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Cartman! schreef op dinsdag 15 november 2011 @ 10:04:
Die veilige methodes zjin er ook gewoon maar niet iedereen gebruikt het. Hoe vaak zien we hier geen topics voorbij komen van users die code tonen die zo lek is als een mandje? Vaak. En hoe vaak zien we staan "is alleen voor intern" of "er is maar 1 iemand die het gebruikt". Die developers weten er dus van maar zijn te lui om hun spul te beveiligen. Dan kun je op mysql_query dus makkelijk een warning neerprakken maar zulk soort developers negeren dat toch, heeft gewoon weinig zin imo.
Waarom gebruiken ze de onveilige manier? Omdat die veel simpeler is. Het is een slechte interface: hard to use, easy to misuse. Vandaar mijn voorstel, wat even simpel of zelfs simpeler is dan de onveilige manier.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
PDO is niet heel veel moeilijker maar het kost je gewoon iets meer tijd in de setup. De developers zijn gewoon lui die het niet (willen) gebruiken.

En wat houdt je tegen om die wrapper zelf te maken als je er zo mee begaan bent?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Cartman! schreef op dinsdag 15 november 2011 @ 10:55:
PDO is niet heel veel moeilijker maar het kost je gewoon iets meer tijd in de setup. De developers zijn gewoon lui die het niet (willen) gebruiken.

En wat houdt je tegen om die wrapper zelf te maken als je er zo mee begaan bent?
Er zit toch al lang een wrapper in PHP die dit soort functionaliteit voor je afschermt? Je kan toch al lang prepared statements maken? Er zitten zelfs verschillende oplossingen daarvoor in PHP verwerkt. Dat een stel prutsers die niet gebruikt en ook geen eigen wrapper maakt wil niet zeggen dat de taal fout zit. Dit probleem los je op door programmeurs slimmer te maken, niet door ze al het denkwerk uit handen te nemen en ze dus dommer te houden.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Precies wat ik vind ja maar Olaf vind het niet simpel genoeg blijkbaar. Als ie n beter idee heeft dan ben ik daar erg benieuwd naar :)

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Cartman! schreef op dinsdag 15 november 2011 @ 10:55:
PDO is niet heel veel moeilijker maar het kost je gewoon iets meer tijd in de setup. De developers zijn gewoon lui die het niet (willen) gebruiken.
Ik zie geen enkel advies op de mysql_query() pagina om PDO te gebruiken.
En wat houdt je tegen om die wrapper zelf te maken als je er zo mee begaan bent?
Zijn we het er al over eens dat het inderdaad een goed idee is dan?

Acties:
  • 0 Henk 'm!

  • Miyamoto
  • Registratie: Februari 2009
  • Laatst online: 23:08
Het lijkt alsof je voor jezelf al een antwoord hebt, maar graag uit monde van de rest dit bevestigd ziet.

Zie je ergens op php.net staan dat je mysql_query moet gebruiken?
Waarschijnlijk staat er ook nergens dat je een fatsoenlijk wachtwoord moet gebruiken...

Universiteitskrant TU Eindhoven, pagina 3 bovenaan:
wat gaat er mis bij ict-projecten van de overheid?
Daar wordt nog een belangrijk pijnpunt aangehaald, iedereen noemt zich programmeur tegenwoordig. Zoals in dit topic meerdere malen aangekaart: Zonder gedegen opleiding kun je geen goed programma schrijven. SQL injecties included dus...

Het is me ook totaal niet duidelijk wat nu je punt is, of liever, wat je met deze "discussie" (herhalen van zaken) wilt bereiken. Je gooit het hier op de manual/taal/wat dan ook, maar zou je niet eens kijken naar de gebruiker?

Acties:
  • 0 Henk 'm!

  • trinite_t
  • Registratie: Maart 2003
  • Laatst online: 17-09 14:06
Met mysql_query (of het mysqli alternatief) is niets mis, ook met het gebruik ervan niet. De functie doet precies wat je er van verwacht. Het probleem zit bij de programmeurs die direct input data in zijn queries zet.

Het grote nadeel van php is dat de drempel om het te gebruiken erg laag is. Hierdoor is er ook een boel prut code beschikbaar (en nog meer prut voorbeelden) en zie ik steeds vaker om me heen dat php "programmeurs " maar wild om zich heen roepen dat er voor x() of voor y() geen functie in php zit. Dit terwijl de meeste functies heel simpel met lusje om de huidige api heen te maken zijn. Php is al een heel uitgebreide taal met een (redelijk) goede api (wat de leercurve erg vlak maakt). Je moet alleen nog steeds wel programeer ervaaring hebben om een fatsoenlijk product op te leveren.

Een van de dingen die een fatsoenlijk product (dat een database gebruikt) nodig heeft is een goede database laag. Of dat nou PDO, mysql_query of prepared statements zijn maakt niets uit. De programmeur moet alleen wel snappen dat als hij mysql_query gebruikt dat hij niet direct input data in zijn queries moet plakken.

The easiest way to solve a problem is just to solve it.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Miyamoto schreef op dinsdag 15 november 2011 @ 16:21:
Het is me ook totaal niet duidelijk wat nu je punt is, of liever, wat je met deze "discussie" (herhalen van zaken) wilt bereiken. Je gooit het hier op de manual/taal/wat dan ook, maar zou je niet eens kijken naar de gebruiker?
Ik kijk in de eerste plaats naar het probleem: tig SQL injectie vulnerabilities.
Dan vraag ik me af hoe dat voorkomen had kunnen worden en in de toekomst voorkomen kan worden.

Jij (en anderen) leggen de schuld bij de developer en laten het daar bij. Lost dat het probleem op?
Daar wordt nog een belangrijk pijnpunt aangehaald, iedereen noemt zich programmeur tegenwoordig.
Een ander pijnpunt: programmeurs zijn koppig en geven graag de gebruiker de schuld...

[ Voor 13% gewijzigd door Olaf van der Spek op 15-11-2011 16:44 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Olaf van der Spek schreef op dinsdag 15 november 2011 @ 16:37:
[...]

Jij (en anderen) leggen de schuld bij de developer en laten het daar bij. Lost dat het probleem op?
Nee, want een developer maakt geen beslissingen over het indelen van uren, dagen of weken voor het reviewen van oude code om te kijken of er niet ergens een lek in zit. Maar dat maakt nog niet dat het probleem niet daar zit en ook daar opgelost moet worden: bij developers en de bedrijven waar ze voor werken. Betere sollicitatieprocedures, betere opleidingen binnen het bedrijf zelf en peer review zijn een aantal dingen die eraan kunnen bijdragen dat het "probleem" opgelost wordt. Een regeltje over prepared statements opnemen op de manualpagina van mysql_query doet dat niet.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
NMe schreef op dinsdag 15 november 2011 @ 16:45:
Nee, want een developer maakt geen beslissingen over het indelen van uren, dagen of weken voor het reviewen van oude code om te kijken of er niet ergens een lek in zit. Maar dat maakt nog niet dat het probleem niet daar zit en ook daar opgelost moet worden: bij developers en de bedrijven waar ze voor werken. Betere sollicitatieprocedures, betere opleidingen binnen het bedrijf zelf en peer review zijn een aantal dingen die eraan kunnen bijdragen dat het "probleem" opgelost wordt.
Die dingen gaan toch ook niet gebeuren? Met andere woorden, dat lost toch ook niks op?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Olaf van der Spek schreef op dinsdag 15 november 2011 @ 16:37:
[...]

Ik kijk in de eerste plaats naar het probleem: tig SQL injectie vulnerabilities.
Dan vraag ik me af hoe dat voorkomen had kunnen worden en in de toekomst voorkomen kan worden.
Ik vind de documentatie van mysql_query ook niet de plek om SQL injection te gaan bespreken eigenlijk. Die pagina biedt wat het moet doen: uitleggen hoe de functie werkt.Hooguit een linkje naar een pagina die het bespreekt. Er is ook geen standaard-functie tegen xss of csrf, daar zul je als developer iets op moeten verzinnen. Een goed voorbeeld vond ik de md5-functie, doet precies wat het moet doen maar voor wachtwoorden kun je t beter niet meer gebruiken en dat hoor je als developer te weten.
Jij (en anderen) leggen de schuld bij de developer en laten het daar bij. Lost dat het probleem op?
Ja, zo blijven de goede developers vanzelf over, goed voor onze markt :)
Een ander pijnpunt: programmeurs zijn koppig en geven graag de gebruiker de schuld...
Heeft dat iets met deze discussie te maken?
Olaf van der Spek schreef op dinsdag 15 november 2011 @ 16:49:
[...]

Die dingen gaan toch ook niet gebeuren? Met andere woorden, dat lost toch ook niks op?
Zegt dat iets over jouw werkgever :? Hier gebeuren zulke dingen wel. Iemand die komt solliciteren krijgt gewoon een aantal vragen en uit zijn antwoorden kun je best halen of iemand verder kijkt dan een voorbeeld uit de documentatie. Ook doen we hier aan code reviews en proberen we elkaars projecten te hacken.

[ Voor 18% gewijzigd door Cartman! op 15-11-2011 16:55 ]


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Cartman! schreef op dinsdag 15 november 2011 @ 16:53:
Ik vind de documentatie van mysql_query ook niet de plek om SQL injection te gaan bespreken eigenlijk. Die pagina biedt wat het moet doen: uitleggen hoe de functie werkt.Hooguit een linkje naar een pagina die het bespreekt.
Maar ook dat linkje staat er niet (voor zover ik weet). Een SQL injection pagina is er wel: http://php.net/manual/en/security.database.sql-injection.php

Maar daar wordt dan weer mysql_real_escape_string() in plaats van PDO aangeraden.
Heeft dat iets met deze discussie te maken?
Ja. Kun je de link niet leggen?
Zegt dat iets over jouw werkgever :? Hier gebeuren zulke dingen wel. Iemand die komt solliciteren krijgt gewoon een aantal vragen en uit zijn antwoorden kun je best halen of iemand verder kijkt dan een voorbeeld uit de documentatie. Ook doen we hier aan code reviews en proberen we elkaars projecten te hacken.
Fijn voor jullie. Geen idee wat mijn werkgever hiermee te maken heeft. Ik zeg ook niet dat het overal fout gaat.

[ Voor 4% gewijzigd door Olaf van der Spek op 15-11-2011 16:59 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Olaf van der Spek schreef op dinsdag 15 november 2011 @ 16:49:
[...]

Die dingen gaan toch ook niet gebeuren? Met andere woorden, dat lost toch ook niks op?
Dus de conclusie is: we kunnen niets doen, want er gebeurt toch niets, en dat lost niets op. Mooi, kunnen we dan nu de topic sluiten?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Olaf van der Spek schreef op dinsdag 15 november 2011 @ 16:58:
Maar ook dat linkje staat er niet (voor zover ik weet). Een SQL injection pagina is er wel: http://php.net/manual/en/security.database.sql-injection.php
Dat bedoel ik, hooguit een linkje naar die pagina zou mooi meegenomen zijn als een extra'tje.
Maar daar wordt dan weer mysql_real_escape_string() in plaats van PDO aangeraden.
Dat is ook een veilige methode, opzich weinig mis mee behalve dat het niet zo flexibel is als PDO.
Ja. Kun je de link niet leggen?
Ik zie niet in wat een discussie over developers vs users te maken heeft met developers vs security.
Fijn voor jullie. Geen idee wat mijn werkgever hiermee te maken heeft. Ik zeg ook niet dat het overal fout gaat.
Blijkbaar heb je alleen maar slechte ervaringen dat je zegt dat er niks veranderd. Er veranderen heus dingen maar misschien niet bij jou dus.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Cartman! schreef op dinsdag 15 november 2011 @ 17:11:
Ik zie niet in wat een discussie over developers vs users te maken heeft met developers vs security.
Ook hier: vooral niet een simpelere, veiligere API toevoegen, maar de developer de schuld geven.
Blijkbaar heb je alleen maar slechte ervaringen dat je zegt dat er niks veranderd. Er veranderen heus dingen maar misschien niet bij jou dus.
Nogmaals, het gaat niet om mij.
Als ik de frontpage volg, zie ik vooral verandering in negatieve zin.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Olaf van der Spek schreef op dinsdag 15 november 2011 @ 17:31:
[...]

Nogmaals, het gaat niet om mij.
Als ik de frontpage volg, zie ik vooral verandering in negatieve zin.
Er wordt nu echt niet meer gehackt dan een jaar of 5 geleden. Het wordt nu alleen veel groter in het nieuws gebracht omdat het om steeds grotere sites gaat nu ineens de hele wereld online is. Volgens mij is het echt niet ineens allemaal erger geworden.

En zelfs als het wel erger is geworden dan is er dus maar één oplossing die geen oude code gaat breken, en dat is programmeurs en hun werkgevers voorlichten en opleiden. Dat is niet de taak van de taal, de IDE of het framework, dat is een taak van diezelfde werkgevers.
Olaf van der Spek schreef op dinsdag 15 november 2011 @ 17:31:
[...]

Ook hier: vooral niet een simpelere, veiligere API toevoegen, maar de developer de schuld geven.
Omdat die veilige optie er allang is en programmeurs hem (volgens jou!) structureel links laten liggen. Wie is het dán schuld?

[ Voor 18% gewijzigd door NMe op 15-11-2011 17:39 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Beatboxx
  • Registratie: April 2010
  • Laatst online: 26-10-2022

Beatboxx

Certified n00b

Over sql_injecton voorkomen. Eigenlijk is alles wat ik doe alles wat met de database te maken heeft door myql_real_escape_string(); halen. Is dat genoeg?

Acties:
  • 0 Henk 'm!

  • martijnve
  • Registratie: December 2004
  • Laatst online: 18-09 10:04
Beatboxx schreef op dinsdag 15 november 2011 @ 17:40:
Over sql_injecton voorkomen. Eigenlijk is alles wat ik doe alles wat met de database te maken heeft door myql_real_escape_string(); halen. Is dat genoeg?
Het korte antwoord is ja... tot dat je het perongelijk één keer ergens vergeet.

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
^ Knoeperd van kanttekening: Enkel als je ook alles als string in je query zet. Anders heb je alsnog een gapend gat.

{signature}


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Olaf van der Spek schreef op dinsdag 15 november 2011 @ 17:31:
Ook hier: vooral niet een simpelere, veiligere API toevoegen, maar de developer de schuld geven.
Wat heeft een gebruiker van een site ermee te maken dan? Je legt het me echt niet uit.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Beatboxx schreef op dinsdag 15 november 2011 @ 17:40:
Over sql_injecton voorkomen. Eigenlijk is alles wat ik doe alles wat met de database te maken heeft door myql_real_escape_string(); halen. Is dat genoeg?
Als je dat blind doet en denkt daarmee veilig te zijn: nee, dan moet je je toch echt gaan inlezen in de materie.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Olaf van der Spek schreef op dinsdag 15 november 2011 @ 10:45:
[...]

Waarom gebruiken ze de onveilige manier? Omdat die veel simpeler is. Het is een slechte interface: hard to use, easy to misuse. Vandaar mijn voorstel, wat even simpel of zelfs simpeler is dan de onveilige manier.
Neem dan de PHP-functies voor PostgreSQL als voorbeeld, pg_query_params() is kinderlijk eenvoudig in het gebruik en voorkomt SQL injection:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
$result = pg_query_params(
  $connectie, // database connectie
  "SELECT * FROM gebruikers WHERE voornaam = $1 AND achternaam = $2;", // de SQL
  array(
    $_POST['voornaam'], // alle parameters
    $_POST['achternaam']
  ) 
);
?>

Hoe simpel wil je het hebben? Gebruik gewoon een andere database en de betere functies, hoe je het simpel en veilig.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
NMe schreef op dinsdag 15 november 2011 @ 17:37:
Omdat die veilige optie er allang is en programmeurs hem (volgens jou!) structureel links laten liggen. Wie is het dán schuld?
Hoe bedoel je volgens jou? Het is toch gewoon een feit dat het nog veel te vaak fout gaat?
Cartman! schreef op dinsdag 15 november 2011 @ 17:44:
[...]

Wat heeft een gebruiker van een site ermee te maken dan? Je legt het me echt niet uit.
In dit geval is de gebruiker niet de eindgebruiker thuis maar de developer die een website bouwt en daarbij de PHP mysql_query() functie gebruikt.
cariolive23 schreef op dinsdag 15 november 2011 @ 20:57:
Hoe simpel wil je het hebben? Gebruik gewoon een andere database en de betere functies, hoe je het simpel en veilig.
Kijk! Die hebben er over nagedacht. Maar naar Postgres overstappen alleen om een fatsoenlijke query API te hebben?

[ Voor 3% gewijzigd door Olaf van der Spek op 15-11-2011 21:13 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Eerder zei je namelijk:
Een ander pijnpunt: programmeurs zijn koppig en geven graag de gebruiker de schuld...
Een programmeur en de gebruiker zijn in dit zinsverband dus hetzelfde, ok... je weet me gewoon niet te overtuigen dat het probleem van een luie developer aan de taal ligt, dat ligt aan de developer.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:26

Creepy

Tactical Espionage Splatterer

Ach, dat voorkomt nog steeds niks in een hoop gevallen simpelweg omdat de parameters niet gebruikt hoeven worden (bekijk ff de topicstart voor de lol). "Even snel" een query schrijven en de parameter array "vergeten", en hoppa, weer een SQL injectie mogelijk, ook in Postgress. In *elke* omgeving/taal/database/whatever worden deze fouten gemaakt om wat voor reden dan ook. En de komende jaren gaat er zeer waarschijnlijk erg weinig verbeting in zitten. Er zitten teveel mensen in het vak die te vaak niet precies weten wat ze doen (en te eigenwijs zijn en idd roepen dat het aan het gebruik ligt). Als dat niet wordt opgelost, is er bijna geen verbetering mogelijk.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Miyamoto
  • Registratie: Februari 2009
  • Laatst online: 23:08
Olaf van der Spek schreef op dinsdag 15 november 2011 @ 21:11:
Kijk! Die hebben er over nagedacht. Maar naar Postgres overstappen alleen om een fatsoenlijke query API te hebben?
uuhm, je zou ook op deze pagina uit kunnen komen: pg_query, aka: appels met peren...

Overigens staat er bij beide pagina's: Data inside the query should be properly escaped. (Met link naar ..real_escape..). Hoe duidelijk wil je het hebben?

Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 18-09 15:09
Creepy schreef op dinsdag 15 november 2011 @ 21:35:
En de komende jaren gaat er zeer waarschijnlijk erg weinig verbeting in zitten. Er zitten teveel mensen in het vak die te vaak niet precies weten wat ze doen (en te eigenwijs zijn en idd roepen dat het aan het gebruik ligt). Als dat niet wordt opgelost, is er bijna geen verbetering mogelijk.
En de overvloed aan introductie tutorials over PHP en MySQL helpen nu ook niet bepaald...

Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 18-09 15:04
Styxxy schreef op dinsdag 15 november 2011 @ 22:14:
[...]

En de overvloed aan introductie tutorials over PHP en MySQL helpen nu ook niet bepaald...
Inderdaad, bij de eerste de beste tutorial die ik via Google vind is het al raak. |:(

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

cariolive23 schreef op dinsdag 15 november 2011 @ 20:57:
[...]

Neem dan de PHP-functies voor PostgreSQL als voorbeeld, pg_query_params() is kinderlijk eenvoudig in het gebruik en voorkomt SQL injection:

[...]

Hoe simpel wil je het hebben? Gebruik gewoon een andere database en de betere functies, hoe je het simpel en veilig.
Daar hoef je geen andere database voor te gebruiken, vergelijkbare functies zijn er ook voor MySQL. Hou nou eens op met dat eeuwige ongefundeerde geschop tegen MySQL, we weten het nou wel. Ik begin je kruistocht écht beu te worden nu.
Olaf van der Spek schreef op dinsdag 15 november 2011 @ 21:11:
[...]

Hoe bedoel je volgens jou? Het is toch gewoon een feit dat het nog veel te vaak fout gaat?
Is het ook een feit dat dat altijd komt door slecht programmeren? Is het ook een feit dat het aantal toeneemt zoals je hier suggereert? Heb je ook cijfers die dat ondersteunen? Je roept al de hele tijd dat dingen een feit zijn, maar veel van de dingen die je roept zijn gewoon aannames gebaseerd op een volgens jou toenemend aantal hacks getuige de media. Niet alle hacks die de laatste tijd in de media zijn gekomen zijn per se SQL-injectiefouten, en niet alle SQL-injectiehacks zullen meteen de schuld zijn van de programmeur. Bovendien is de enige "oplossing" die je aandraagt het min of meer verplichten van een bepaald soort functies of het beter voorlichten van mensen. Die voorlichting is niet voor rekening van de taal, dat zou absurd zijn. Opel en Volvo geven ook geen rijles.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
NMe schreef op dinsdag 15 november 2011 @ 22:34:
[...]

Daar hoef je geen andere database voor te gebruiken, vergelijkbare functies zijn er ook voor MySQL.
Vergelijkbaar? Tel het aantal benodigde functies eens om in MySQL met prepared statements te werken, dat is toch echt meer dan één functie en voor beginners (daar waar het probleem SQL injection begint) vaak al een probleem begint te worden. Eenvoud, dat was mijn statement.
Hou nou eens op met dat eeuwige ongefundeerde geschop tegen MySQL, we weten het nou wel. Ik begin je kruistocht écht beu te worden nu.
Uhhh? Waar schop ik dan? Ik noem MySQL niet eens in mijn reactie! Ik geef een linkje naar de PHP-handleiding en laat een regeltje code zien hoe je met pg_query_params() eenvoudig gebruik kunt maken van prepared statements om SQL injection effectief tegen te gaan, dat is toch echt geen schoppen tegen MySQL.

En ja, MySQL heeft niet mijn voorkeur, dat klopt helemaal. En dat komt mede door de vele beperkingen van MySQL en de PHP-functies voor MySQL.

Kort lontje? Dat is jouw probleem, niet de mijne. Lees je eigen reactie eens na voordat je reageert, dat kan geen kwaad.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
offtopic:
Het topic gaat over mysql, en je wist best van het bestaan van de mysqli functies af, maar toch moet je per se naar de goede set Postgres functies linken. Zo kan ik ook zeggen dat mysqli beter is dan pg_query, makkelijk scoren... :/


edit:
Bedank Captain Obvious. Toch ging de topicstart over mysql_query(), het gros van het topic over mysql en zeg jij 'neem de PHP functie voor Postgres als voorbeeld'. Dat suggereert dat ze allemaal beter zijn cq. Postgres beter is, maar pg_query() zuigt om dezeflde redenen als mysql_query().

[ Voor 38% gewijzigd door Voutloos op 15-11-2011 23:14 ]

{signature}


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Voutloos schreef op dinsdag 15 november 2011 @ 22:51:
offtopic:
Het topic gaat over mysql, en je wist best van het bestaan van de mysqli functies af, maar toch moet je per se naar de goede set Postgres functies linken. Zo kan ik ook zeggen dat mysqli beter is dan pg_query, makkelijk scoren... :/
SQL injection is net zo generiek als SQL en maakt geen onderscheid tussen databases :X

Acties:
  • 0 Henk 'm!

Verwijderd

Dit topic kun je net zo goed hernoemen naar: [Huis in bos met gemiddelde temperaturen van 50 graden] Hoe bosbrand te voorkomen? :+

PHP is een belabberde programmeertaal, zeker voor zoiets als applicaties die aan Internet hangen; doe het gewoon niet. Als je niets beters weet te verzinnen dan PHP, stop dan maar gewoon met ontwikkelen. Als je klanten hebt die om PHP vragen, leg ze dan uit dat het een heel slecht idee is.

Waarom? In PHP hangt de veiligheid van je applicatie af op hoe goed mensen opletten (en dat is nu net waar mensen niet zo goed in zijn). Ze kunnen misschien een week geconcentreerd ergens mee bezig zijn, misschien wel 1 jaar, maar er komt een dag, dat er iemand even niet oplet, en je hebt een probleem (en je weet niet dat je een probleem hebt). De verdere ellende met PHP is dat het ontwikkeld is door een onervaren iemand. Denk aan de meest hippe persoon bij je op de universiteit die voor de lol even een taaltje heeft bedacht (die lopen overal wel rond) tijdens zijn bachelor. Gedaan? Ok, dat is dus de ontwikkelaar van PHP. Ga je daar je bedrijf op bouwen? Nee, dat doe je niet.

Mocht je meer van statistiek houden: hoeveel grote websites zijn van taal X naar PHP overgestapt? En hoeveel andersom? Juist.

Dus conclusie: als je een veilig systeem wilt hebben, moet je het niet al onveilig maken door prutszooi van een of andere hippe gozer te gebruiken.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik hoop dat ik niet uit hoef te leggen waarom het volgende suggereert dat PostgreSQL veel veiliger zou zijn dan MySQL?
cariolive23 schreef op dinsdag 15 november 2011 @ 20:57:
Gebruik gewoon een andere database en de betere functies, hoe je het simpel en veilig.
Als je nou geen voorgeschiedenis had van continu schoppen tegen MySQL zou ik veel minder fel hebben gereageerd, maar nu wek je gewoon de indruk bewust appels met peren te vergelijken. Sowieso heeft bind_param maar één call nodig voor de hele query, dus meer dan een prepare, bind_param en execute-combinatie heb je niet nodig, en als je het per se in één commando wil doen dan heb je een mysql_query_params zo geschreven natuurlijk.
Verwijderd schreef op dinsdag 15 november 2011 @ 23:12:
PHP is een belabberde programmeertaal, zeker voor zoiets als applicaties die aan Internet hangen; doe het gewoon niet. Als je niets beters weet te verzinnen dan PHP, stop dan maar gewoon met ontwikkelen. Als je klanten hebt die om PHP vragen, leg ze dan uit dat het een heel slecht idee is.

Waarom? In PHP hangt de veiligheid van je applicatie af op hoe goed mensen opletten (en dat is nu net waar mensen niet zo goed in zijn).
Ja, en dat gebeurt natuurlijk alleen in PHP en kan nóóit gebeuren in een C-variant, in Java of in welke andere willekeurige taal dan ook. Als jij PHP afraadt puur omdat het PHP is hoop ik niet dat iemand je ooit serieus neemt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
De meeste van die grote sites draaien nog steeds grote delen op PHP hoor, maak je nou maar geen illusies. Feit blijft dat het van de developer afhangt of je een veilige app krijgt of niet, of je nu in PHP, C++, Python of Java werkt.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op dinsdag 15 november 2011 @ 23:12:
Waarom? In PHP hangt de veiligheid van je applicatie af op hoe goed mensen opletten (en dat is nu net waar mensen niet zo goed in zijn).
Noem eens 1 taal waarbij dit niet zo is?

PHP heeft een lage leercurve, heeft extreme bagger tuts op het inet staan, heeft een slechte documentatie (imho zelfs rampzalig te noemen als je de comments meepakt, wat soms weer nodig is omdat dan de comments beter zijn dan de docs :) ) maar in de basis is het niet beter/slechter dan een andere taal.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
NMe schreef op dinsdag 15 november 2011 @ 22:34:
Daar hoef je geen andere database voor te gebruiken, vergelijkbare functies zijn er ook voor MySQL. Hou nou eens op met dat eeuwige ongefundeerde geschop tegen MySQL, we weten het nou wel. Ik begin je kruistocht écht beu te worden nu.
Hij heeft gewoon een goed punt. Wanneer hou jij nou eens op met stellen dat prepared statements zo simpel zijn?
Is het ook een feit dat dat altijd komt door slecht programmeren?
Nee, niet altijd.
Is het ook een feit dat het aantal toeneemt zoals je hier suggereert? Heb je ook cijfers die dat ondersteunen?
Geen idee. Nope. Doet het er nou echt toe of het stijgt? Het komt gewoon (veel) te vaak voor.
Je roept al de hele tijd dat dingen een feit zijn, maar veel van de dingen die je roept zijn gewoon aannames gebaseerd op een volgens jou toenemend aantal hacks getuige de media. Niet alle hacks die de laatste tijd in de media zijn gekomen zijn per se SQL-injectiefouten, en niet alle SQL-injectiehacks zullen meteen de schuld zijn van de programmeur. Bovendien is de enige "oplossing" die je aandraagt het min of meer verplichten van een bepaald soort functies of het beter voorlichten van mensen. Die voorlichting is niet voor rekening van de taal, dat zou absurd zijn. Opel en Volvo geven ook geen rijles.
Alsof auto's geen veiligheidssystemen hebben om de bestuurder te beschermen... Weer zo'n zwak voorbeeld.
Ja, en dat gebeurt natuurlijk alleen in PHP en kan nóóit gebeuren in een C-variant, in Java of in welke andere willekeurige taal dan ook. Als jij PHP afraadt puur omdat het PHP is hoop ik niet dat iemand je ooit serieus neemt.
In talen / platformen met betere APIs komt het inderdaad minder voor. In C# heb je niet zo snel een buffer overrun als in C bijvoorbeeld.

[ Voor 10% gewijzigd door Olaf van der Spek op 16-11-2011 01:11 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Olaf van der Spek schreef op woensdag 16 november 2011 @ 01:08:
[...]
Hij heeft gewoon een goed punt. Wanneer hou jij nou eens op met stellen dat prepared statements zo simpel zijn?
Wou jij dan zeggen dat ze moeilijk zijn?
[...]
Geen idee. Nope. Doet het er nou echt toe of het stijgt? Het komt gewoon (veel) te vaak voor.
En dat heeft imho zo goed als niets te maken met de taal, maar meer en meer met de kennis en het budget en het wensenpakket en deadlines etc. etc.
[...]
In talen / platformen met betere APIs komt het inderdaad minder voor. In C# heb je niet zo snel een buffer overrun als in C bijvoorbeeld.
Nope, dat ligt niet aan de taal dat ligt aan de opvoeding. In C# kan je net zulke bagger code maken als in C.
Enkel komt dat niet vaak meer voor in de tuts / boeken voor C# en de tuts/boeken voor C kunnen rustig 10 of 20 jaar oud zijn.
Kijk maar eens naar hedendaagse betrouwbare tuts voor PHP, daar tref je niet snel meer iets in als mysql_query bij de beginnerstuts. Enkel zwerft er nog iets van tig jaar historie over het internet en wordt dat nog steeds eindeloos gerehashed door zolderkamerprogrammeurs die denken hulpvaardig te zijn en een tut te schrijven.

C# is geen magic wand tegen buffer overruns, enkel er worden andere technieken aangeleerd waardoor het minder vaak voorkomt. Die technieken kan je echter net zo goed toepassen op C.

[ Voor 6% gewijzigd door Gomez12 op 16-11-2011 01:44 ]


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Hoe denkt men hier over strcat en aanverwanten in C? Die zijn ook een grote bron van veiligheidsfouten, en daarom geven sommige compilers tegenwoordig een warning op het gebruik ervan. Het heeft ook een hele tijd geduurt voordat men overstapte op veiligere varianten daarvoor, omdat er toch teveel fouten mee werden gemaakt, zelfs door ervaren programmeurs die best wel weten wat een buffer overflow is.
Pagina: 1 2 3 4 Laatste

Dit topic is gesloten.