Vraag & Antwoord

Webprogrammeren & scripting

Templates mbv Php

29 antwoorden
  • Op veel pagina's zo ook dit forum zie je bijvoorbeeld index.php?page=13, nu vraag ik me af hoe zoiets werkt. Staat dan alle tekst in een database of staat alles in 1 bestand?? En hoe kan je zoiets zelf maken, en dan bedoel ik geen kant en klaar systeem, ik wil het gewoon zelf maken.....
  • Meestal doe je gewoon een actie aan de hand van die parameter. Die actie houdt vaak in dat er een bepaald bestand geincluded wordt:[code:1:407c128c20]if($_GET["page"] == 13) { include(....); } etc[/code:1:407c128c20]
  • Als je aan de hand van die variabele een pagina gaat includen en je hebt een hoop bestanden dan kan je ook gebruik maken van [url=http://www.php.net/switch]switch()[/url]. Dit is een overzichtelijke functie die gelijk is aan een hele serie if-elseif-functies. Ik raad je overigens af om de variabele te gebruiken om direct een bestand te includen zoals [i:65532e01ab]include($_GET["bla"]."php");[/i:65532e01ab] want dit is heel erg onveilig! 't Is maar dat je 't weet... - Bas
  • [quote:2b2070f069="Bill Gates"]Meestal doe je gewoon een actie aan de hand van die parameter. Die actie houdt vaak in dat er een bepaald bestand geincluded wordt:[code:1:2b2070f069]if($_GET["page"] == 13) { include(....); } etc[/code:1:2b2070f069][/quote:2b2070f069] Hoeft niet eens. Die 'page' kan bijvoorbeeld ook een id van een artikel in een database zijn (lijkt me logischer in dit geval omdat het een getal is). Krijg je bijvoorbeeld zoiets: [code:1:2b2070f069] $sql = "SELECT * FROM article WHERE id = '".$_GET["page"]."'"; [/code:1:2b2070f069]
  • Ook hier zou ik om veiligheidsredenen niet direct de parameter in de query stoppen maar eerst testen op een aantal voorwaarden, bijvoorbeeld controleren of de waarde nummeriek is. - Bas
  • Ik heb zelf dan ook al switch gebruikt, leek me idd handiger dan if else... ik gebruik nu zelf index.php?page=gastenboek en dan include dat bestand. In dat bestand staan 2 strings $title en $content, en die worden in index.php op de goede plaats gezet. Maar moet ik dan nog een controle uitvoeren voordat in de bestanden include (voor de veiligheid)???
  • [quote:8182ec822d="BasHamar"]Ook hier zou ik om veiligheidsredenen niet direct de parameter in de query stoppen maar eerst testen op een aantal voorwaarden, bijvoorbeeld controleren of de waarde nummeriek is. - Bas[/quote:8182ec822d] Ligt er maar net aan om wat voor informatie het gaat natuurlijk. Lijkt me over het algemeen nou niet echt nodig om eerst te gaan controleren of die get variabele nummeriek is.
  • jawel $sql = "SELECT * FROM article WHERE id = '".$_GET["page"]."'" wat nou als je stuurt: index.php?page=1;REMOVE%20* dan is je database weg. Zo zal het niet precies zijn bij een SQL db, mara het gaat om het idee
  • [quote:1f69b63d9a="webspider"]jawel $sql = "SELECT * FROM article WHERE id = '".$_GET["page"]."'" wat nou als je stuurt: index.php?page=1;REMOVE%20* dan is je database weg. Zo zal het niet precies zijn bij een SQL db, mara het gaat om het idee[/quote:1f69b63d9a] Bullshit. Jij bouwt je query verkeerd. Als je goed naar mijn voorbeeld had gekeken dan had je gezien dat ik m'n variabele tussen single quotes (') heb staan. Als [b:1f69b63d9a]string[/b:1f69b63d9a] dus! Dan gaat jouw ideetje helemaal niet op! Daarom dus altijd je variabelen als string voeren aan mysql, anders kun je idd hele onveilige situaties krijgen.
  • Mijn systeem werkt met secties en pagina’s. Bv: 1 - index.php?s=home&page=3 laad homepage3 2 - index.php?s=delphi&page=0 laad delhipage0 Natuurlijk wordt alles gecontroleerd. Eerst of de sectie wel bestaat, bij niet bestaan wordt de home sectie gekozen. Bij de pagina wordt de bestandsnaam gemaakt en dan met fileexist gekeken of het bestaat. Als de file niet bestaat komt altijd de homepage van de sectie met pagina nummer 0. Op die manier is er ook geen “switch” nodig. Met de sectie naam wordt ook de juiste css file geladen, dus home.css, delphi.css enz. De pagina nummers gaan tot 100, heb ik voorlopig nog een beetje de ruimte. wimb
  • maar hoe sla je dat alles dan op??? in bestanden ofzo.... en staan daar dan variabelen in die je in je index.php zet??? Ik heb overal gezocht maar heb hier eigenlijk niks over kunnen vinden...
  • [quote:300d513183="InZane"]Als je goed naar mijn voorbeeld had gekeken dan had je gezien dat ik m'n variabele tussen single quotes (') heb staan. Als [b:300d513183]string[/b:300d513183] dus! Dan gaat jouw ideetje helemaal niet op! [/quote:300d513183] pagina.php?page=1%27%3Bdrop%20table%20foo%3Bselect%20%271 [size=9:300d513183][i:300d513183](dat is de urlencoded versie van [color=blue:300d513183]1';drop table foo;select '1[/color:300d513183])[/i:300d513183][/size:300d513183] Met andere woorden: controleer toch maar even je invoer. Niet alle sql injection trucs zijn mogelijk op elke database. Maar een basis beveiliging is wel aan te raden. Al was het maar om jezelf te dwingen om na te denken over waar je mee bezig bent. Een van de basisregels van (web)development is: "Heb geen blindelings vertrouwen in de data die je van een client krijgt". Daarmee zeg je dus niet dat alles onveilig is, maar dwingt je wel tot nadenken over de gevolgen die de data kan hebben op je systeem.
  • [quote:ad6fa0697c="Annie"][quote:ad6fa0697c="InZane"]Als je goed naar mijn voorbeeld had gekeken dan had je gezien dat ik m'n variabele tussen single quotes (') heb staan. Als [b:ad6fa0697c]string[/b:ad6fa0697c] dus! Dan gaat jouw ideetje helemaal niet op! [/quote:ad6fa0697c] pagina.php?page=1%27%3Bdrop%20table%20foo%3Bselect%20%271 [size=9:ad6fa0697c][i:ad6fa0697c](dat is de urlencoded versie van [color=blue:ad6fa0697c]1';drop table foo;select '1[/color:ad6fa0697c])[/i:ad6fa0697c][/size:ad6fa0697c] Met andere woorden: controleer toch maar even je invoer. Niet alle sql injection trucs zijn mogelijk op elke database. Maar een basis beveiliging is wel aan te raden. Al was het maar om jezelf te dwingen om na te denken over waar je mee bezig bent. Een van de basisregels van (web)development is: "Heb geen blindelings vertrouwen in de data die je van een client krijgt". Daarmee zeg je dus niet dat alles onveilig is, maar dwingt je wel tot nadenken over de gevolgen die de data kan hebben op je systeem.[/quote:ad6fa0697c] Scheelt dat ik alleen op eigen servers werk en daar werkt het in ieder geval niet. (ja dat is gecontroleerd). Als dat wel werkt, dan zou ik toch eens ernstig naar je serverconfiguratie gaan kijken.
  • [quote:77e7f07f98="InZane"]Als dat wel werkt, dan zou ik toch eens ernstig naar je serverconfiguratie gaan kijken.[/quote:77e7f07f98] Op welk aspect van de configuratie van de server doel je dan?
  • [quote:a206b6708a="InZane"]Scheelt dat ik alleen op eigen servers werk en daar werkt het in ieder geval niet. (ja dat is gecontroleerd). Als dat wel werkt, dan zou ik toch eens ernstig naar je serverconfiguratie gaan kijken.[/quote:a206b6708a]Annie geeft enkel een voorbeeld (zie alleen niet wat [i:a206b6708a]select '1[/i:a206b6708a] voor nut\betekenis heeft), die misschien in jouw (en in mijn) situatie niet werkt, maar het gaat om het idee. Stel dat ik [i:a206b6708a]pagina.php?page=1' or 1=1[/i:a206b6708a] doe, dan krijg ik alle pagina's. Dit hoeft op zich nog niet zo erg te zijn, maar als ik dezelfde methode doe op een inlogscript [i:a206b6708a]login.php?username=remy&password=bla' or 1=1[/i:a206b6708a] dan kan ik altijd inloggen (zonder dat ik een juiste username en\of password heb). -Rémy
  • [quote:2330b6fbf6="Remytje"]Dit hoeft op zich nog niet zo erg te zijn, maar als ik dezelfde methode doe op een inlogscript [i:2330b6fbf6]login.php?username=remy&password=bla' or 1=1[/i:2330b6fbf6] dan kan ik altijd inloggen (zonder dat ik een juiste username en\of password heb). -Rémy[/quote:2330b6fbf6] Normaal gesproken log je in vanuit een formulier en het lijkt me niet meer dan logisch dat je method="post" gebruikt en dus je variabelen in de volgende pagina ophaalt met $_POST["username"] en $_POST["password"]. De methode die jij beschrijft is idd niet veilig. [quote:2330b6fbf6="Annie"][quote:2330b6fbf6="InZane"]Als dat wel werkt, dan zou ik toch eens ernstig naar je serverconfiguratie gaan kijken.[/quote:2330b6fbf6] Op welk aspect van de configuratie van de server doel je dan?[/quote:2330b6fbf6] Je gebruikte software, of vind je het normaal dat [b:2330b6fbf6]pagina.php?page=1%27%3Bdrop%20table%20foo%3Bselect%20%271[/b:2330b6fbf6] werkt? Ik niet in ieder geval en ik moet zeggen dat ik het ook nog nooit heb meegemaakt.
  • [quote:f2c3bed7b3="InZane"]Normaal gesproken log je in vanuit een formulier en het lijkt me niet meer dan logisch dat je method="post" gebruikt en dus je variabelen in de volgende pagina ophaalt met $_POST["username"] en $_POST["password"]. [/quote:f2c3bed7b3] Met alle respect hoor, maar heb je enig idee waar je het over hebt? Waarom zou een POST waarde "veiliger" zijn dan een waarde die met GET verstuurd is? Ook in het geval van een POST kan je de data meegeven zoals Remytje aangeeft [quote:f2c3bed7b3="InZane"]Je gebruikte software, of vind je het normaal dat [b:f2c3bed7b3]pagina.php?page=1%27%3Bdrop%20table%20foo%3Bselect%20%271[/b:f2c3bed7b3] werkt? Ik niet in ieder geval en ik moet zeggen dat ik het ook nog nooit heb meegemaakt.[/quote:f2c3bed7b3] Dit is een normale URL encoded string die via de querystring wordt meegestuurd. Ik zie niet in waarom dit geweigerd zou moeten worden door een webserver. Als je database server of data access laag meerdere instructies gescheiden door puntkomma toestaat moet je het dus afvangen. En dat doe je in je applicatie en heeft dus vrij weinig te maken met je server configuratie. (Q.E.D.)
  • [quote:2ab4913244="InZane"][quote:2ab4913244="webspider"]jawel $sql = "SELECT * FROM article WHERE id = '".$_GET["page"]."'" wat nou als je stuurt: index.php?page=1;REMOVE%20* dan is je database weg. Zo zal het niet precies zijn bij een SQL db, mara het gaat om het idee[/quote:2ab4913244] Bullshit. Jij bouwt je query verkeerd. Als je goed naar mijn voorbeeld had gekeken dan had je gezien dat ik m'n variabele tussen single quotes (') heb staan. Als [b:2ab4913244]string[/b:2ab4913244] dus! Dan gaat jouw ideetje helemaal niet op![/quote:2ab4913244] Dat idee gaat nog wel degelijk op. dan maak je er gewoon van: index.php?page=1';remove%20* (al zul je wel de hex-code v/d ascii-code van ' moeten gebruiken) de enige veilige methode is: [code:1:2ab4913244]$sql = "SELECT * FROM article WHERE id = '".addslashes($_GET["page"])."'";[/code:1:2ab4913244]
  • [quote:9e3da745c1="Annie"]Dit is een normale URL encoded string die via de querystring wordt meegestuurd. Ik zie niet in waarom dit geweigerd zou moeten worden door een webserver. Als je database server of data access laag meerdere instructies gescheiden door puntkomma toestaat moet je het dus afvangen. En dat doe je in je applicatie en heeft dus vrij weinig te maken met je server configuratie. (Q.E.D.)[/quote:9e3da745c1] Zal het even proberen uit te leggen.. De webserver accepteert het wel. Die heeft er niet zoveel mee te maken. Je Query klopt alleen van geen kanten meer. Hij zal er zoiets van maken: [b:9e3da745c1]SELECT * FROM bla WHERE id = '2;DROP table foo';[/b:9e3da745c1] MySQL/watdanook zal een record gaan zoeken in table [b:9e3da745c1][i:9e3da745c1]bla[/i:9e3da745c1][/b:9e3da745c1] met id [b:9e3da745c1][i:9e3da745c1]2;DROP table foo[/i:9e3da745c1][/b:9e3da745c1]. Zonder quotes zou het idd wel kunnen werken: [b:9e3da745c1]SELECT * FROM bla WHERE id = 2;DROP table foo;[/b:9e3da745c1] [quote:9e3da745c1] index.php?page=1';remove%20* (al zul je wel de hex-code v/d ascii-code van ' moeten gebruiken) [/quote:9e3da745c1] Geprobeerd.. wil niet..
  • [quote:d997f76b48="Annie"] Met alle respect hoor, maar heb je enig idee waar je het over hebt? Waarom zou een POST waarde "veiliger" zijn dan een waarde die met GET verstuurd is? Ook in het geval van een POST kan je de data meegeven zoals Remytje aangeeft [/quote:d997f76b48] GET vars blijven in je browser history hangen (maar dat was het punt niet in dit geval) En natuurlijk kun je in het geval van een POST ook de data weergeven zoals remytje deed, maar er wordt toch niks mee gedaan. Of je moet register globals aan hebben staan in je php.ini, maar da's niet echt handig.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.