Versio

Het ?id=1 verhaal

Uitleg over gegevens doorgeven via de url

Gesponsorde koppelingen

Inhoudsopgave

  1. Standalone
  2. Database combinatie
  3. Security issues

 

35 reacties op 'Het ?id=1 verhaal'

PHP hulp
PHP hulp
0 seconden vanaf nu
 
Gesponsorde koppelingen
Marien xD
Marien xD
8 jaar geleden
 
0 +1 -0 -1
elke commentaar of toevoeging is welkom, het is niet voor niets een site van phpers voor phpers :)
Henkjan
henkjan
8 jaar geleden
 
0 +1 -0 -1
hey, duidelijke tut!, alleen er zit een foutje in bij de security issues.
bij: if(in_array($pagina) ,
achter de $pagina moet nog , $paginas
dus if(in_array($pagina, $paginas), anders doetie het niet zo heel goed ;)
Erik Rijk
Erik Rijk
8 jaar geleden
 
0 +1 -0 -1
goeie tutorial met goeie uitleg.
ik ging net een profielensysteem maken dus kan deze pagina er ook wel bijhouden.
je gaat net iets meer op de security in dan ik zelf altijd deed

bedankt hiervoor.

EDIT:

misschien nog leuk om erbij te voegen.
als een id niet bestaat er een melding van geven.
Marien xD
Marien xD
8 jaar geleden
 
0 +1 -0 -1
@erik & henkjan
De suggesties zijn toegevoegd en heb bij de database nog 1 let opje toegevoegd ;)
Eric Cartman
Eric Cartman
8 jaar geleden
 
0 +1 -0 -1
Maar wat is er gevaarlijk aan als iemand zijn eigenpagina achter page zet..? Altijd al willen weten
Marien xD
Marien xD
8 jaar geleden
 
0 +1 -0 -1
@Steffan
ik heb er is_int van gemaakt :)

@Jip
Ik geef er een voorbeeld van, zelf heb ik het nog nooit meegemaakt maar heb dit wel in een security document gelezen. Het is een onderschat probleem (officieel zeg ;))
PHP erik
PHP erik
8 jaar geleden
 
0 +1 -0 -1
Met is_int() zal het hele script niet werken aangezien een $_GET geen int's kan bevatten maar enkel strings (en arrays).
Marien xD
Marien xD
8 jaar geleden
 
0 +1 -0 -1
Waarom werkt is_numeric dan wel?


8 jaar geleden
 
0 +1 -0 -1
@PHPerik
Als je is_int() of is_numric() toepast dan zal PHP kijken of het een nummer is. Bij PHP geef je namelijk niet op wat type een varaibelen is.

@Marien
Toevoeging als je met strings werkt en een database kijk dan eerste of er ; of * in voorkomen en verwijder deze dan om eventuele hacks te voorkomen.
Marien xD
Marien xD
8 jaar geleden
 
0 +1 -0 -1
Ik heb het iets uitgebreid weer :P (ik blijf bezig). Ik vind de security wel een belangrijk verhaal. Hierbij moet ik dit gewoon vermelden, vooral bij beginners.

@webmakerij
Ik zal binnenkort ook een stukje opnemen hoe je strings kan controleren...
Enne, goed uitgelegd ;)
Legolas
Legolas
8 jaar geleden
 
0 +1 -0 -1
misschien is dit nog handig voor security issues? http://www.legolasweb.nl/content/view/47/35/
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


8 jaar geleden
 
0 +1 -0 -1
ik gebruik gewoon is_numeric()
niks is_int() !!!
Legolas
Legolas
8 jaar geleden
 
0 +1 -0 -1
@Webmakerij
bij is_int kijkt ie naar het type, bij is_numeric of het een nummer is


8 jaar geleden
 
0 +1 -0 -1
Weet ik. Nou en? Het werkt :)
En als ze id = 1.224212 willen opzoeken geeft me site gewoon de fout dat het ID niet is gevonden. Klaar uiT :)
PHP erik
PHP erik
8 jaar geleden
 
0 +1 -0 -1
Voor de mensen die het nog niet begrijpen. Ik zal een voorbeeld geven.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

$test1
= "5";
$test2 = 5;

if ( is_int($test1) ) // geeft FALSE
if ( is_numeric($test1) ) // geeft TRUE

if ( is_int($test2) ) // geeft TRUE
if ( is_numeric($test2) ) // geeft TRUE

?>


Een $_POST is nooit van het TYPE int, dus zal is_int() nooit werken (deze kijkt namelijk naar het TYPE, niet naar een decimaal).

Gewoon is_numeric() gebruiken dus bij het controleren van $_POSTs. Eventueel strstr() met "," of ".".
EdwinG
EdwinG
8 jaar geleden
 
0 +1 -0 -1
Voor het werken met strings:
Strings in combinatie met database zijn soms noodzakelijk (gebruikersnaam, wachtwoord voor inloggen e.d.)
addslashes() is erg belangrijk, hiermee wordt voorkomen dat in een string bijvoorbeeld ", ' of ; wordt meegegeven. Op die manier is een sql-insert te voorkomen.

Wachtwoorden zullen overigens meestal met POST variabelen worden doorgestuurd. (om te voorkomen dat ze gelezen kunnen worden door iemand die over de schouders mee kijkt.)
The Beeding Clown
The Beeding Clown
8 jaar geleden
 
0 +1 -0 -1
mischien handig om even te vermelden is dat je ook in 1 lijn de get's kan checken doormiddel van de terarny operator

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

$id
= (isset($_GET['id'])) && is_numeric($_GET['id']) ? $_GET['id'] : false;

if($id)
    // hier je query's
else
    echo 'Sorry, we konden er niet achter komen waarnaar je opzoek was';

?>



Voorbeeld met nav

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

$nav
= array("home", "info", "downloads");

$view = isset($_GET['view']) && in_array($_GET['view'], $nav) ? $_GET['view'] : "home";

foreach($nav as $value)
    echo '< href="index.php?view='.$value.'" title="">'.$value.'</a><br />';


if(file_exists("includes/".$view.".php"))
    require("includes/".$view.".php");
else
    echo 'Sorry de page waarnaar je opzoek was kon niet gevonden worden';

?>
Jan
Jan
8 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $content
= str_replace("/", "", $content);
?>


index.php?content=paginax
is dit op zich ook al niet veilig?
of zijn er nadelen aan deze methode?
Mike de Klerk
Mike de Klerk
8 jaar geleden
 
0 +1 -0 -1
@Marien
Dat met die sites erachter zetten heeft in dit geval geen invloed. Dat komt pas kijken bij de include functie. Als je dan staat index.php?page=home

en home.php word geinclude dmv include($_GET['page']'.'.php') dan zou je hier een hele url in kunnen plaatsen zonder .php Alleen met je dan wel een server hebben die geen php parsed omdat andes alleen de html geinclude wordt. Maar dat is een ander verhaal.
Waar ik hier nog niemand over heb gehoord zijn MYSQL injections... Zet je magic quotes maar is uit. Dan worden de kommas niet meer geslashed en als je dan het volgende doet SELECT ".$_GET['id']." FROM table_name dan zou je in de id kunnen gaan werken met "" (kommas) en zo een extra opdracht meegeven aan de databsae. zoals drop database_name of table_name of andere dingen. Ik heb haast en ga nu weg ;)_ anders had ik het uitgebreider uitgelegt. Hope you get the point~!
Heleen
Heleen
7 jaar geleden
 
0 +1 -0 -1
Vraagje:
hoe krijg je meerdere waardes achter het vraagteken?
dus naast id=... bijvoorbeeld ook naam=...
iets als: index.php?id=3&naam=jantje
Marien xD
Marien xD
7 jaar geleden
 
0 +1 -0 -1
is volledig correct (Y)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Niek Ha
Niek Ha
7 jaar geleden
 
0 +1 -0 -1
Ik hep het script beetje aangepast:
Dit scriptje staat op test.php.
Nu hoef je niet meer de paginas in te voeren maar leest hij gewoon welke er bestaan, bestaat de pagina niet dan krijg je error.php . maar toen was het probleem als ze naar test.php?pagina=test ginge dat hij bleef openen.. dat is nu opgelost.. simpel maar heel handig.. wanneer je script op index.php staat moet je $paginaopen ="index"; invoeren/ vervangen. nou succes ermee
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?

$paginaopen
= "test";
$pagina = $_GET['pagina'];
$paginas = array($_GET['pagina']);

if(in_array($pagina,$paginas) && file_exists($pagina .".php"))
{

if( $pagina == $paginaopen ){ echo"$paginaopen is al geopend";}else{

    include($pagina .".php");
}}

else
{
    include("error.php");
}

?>
Frank -
Frank -
7 jaar geleden
 
0 +1 -0 -1
@niek90:
$pagina = $_GET['pagina'];
$paginas = array($_GET['pagina']);
en dan
if(in_array($pagina,$paginas)

Dat lijkt mij redelijk zinloos, je weet 100% zeker dat $_GET['pagina'] in deze array staat, je hebt hem daar net zelf ingezet! Ik heb geen idee wat jouw gedachte hierachter is, maar deze code slaat nergens op.

Tip: Gooi deze zooi weg of maak er een fraai stukje code van.
Jurgen assaasas
Jurgen assaasas
7 jaar geleden
 
0 +1 -0 -1
nog een opmerking in je query. integers buiten ' '
Martijn Wieringa
Martijn Wieringa
7 jaar geleden
 
0 +1 -0 -1
Voor het checken of array waarden bestaat gebruik ik doorgaans liever

array_key_exists, maar kwestie van smaak.. ziet er verder netjes uit, leerzaam voor de nieuwelingen ;)
Danny
Danny
4 jaar geleden
 
0 +1 -0 -1
Thnx gozer had dit echt nodig, in 1x werkt het ook :P
Raymond van Os
raymond van Os
2 jaar geleden
 
0 +1 -0 -1
heey, badankt was leerzaam!!
Synaps Framework
Synaps Framework
2 jaar geleden
 
0 +1 -0 -1
Dit is een tut van 5 jaar geleden. Je moet internet jaren volgens mij als honden jaren nemen :P. Dit word niet/nauwelijks meer gebruikt ivm SEO.
Kut Piemel
Kut Piemel
2 jaar geleden
 
0 +1 -0 -1
een tip:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$id
= (int) $_GET['id'];
?>
Marcel Tuinstra
Marcel Tuinstra
2 jaar geleden
 
0 +1 -0 -1
Zou iemand ook kunnen uitleggen hoe ik kan werken met:
http://website/index.php?id=1&action=naam
Ik probeer het gedeelte '&action=naam' in me website te krijgen maar snap der niks van :S
Vincent Huisman
Vincent Huisman
2 jaar geleden
 
0 +1 -0 -1
gebruik gewoon $_GET['id'] en $_GET['action']
Marcel Tuinstra
Marcel Tuinstra
2 jaar geleden
 
0 +1 -0 -1
En hoe verwerk ik dit in een database dan?
Want ik wil dus een bepaald gedeelte dan ophalen met het action verhaal
Karl Karl
Karl Karl
2 jaar geleden
 
0 +1 -0 -1
Zie daarvoor de sql beginnershandleiding.
Marcel Tuinstra
Marcel Tuinstra
2 jaar geleden
 
0 +1 -0 -1
Neen zo bedoel ik het niet sorry,,
Zal het even proberen duidelijk uit te leggen.
Ik heb het gedeelte index.php?id=x verhaal al wel uit de database kunnen halen. Allen als ik dan dus index.php?id=x&action=x ook uit de database wil halen moet ik dan een aparte table maken of in dezelfde zetten.
Karl Karl
Karl Karl
2 jaar geleden
 
0 +1 -0 -1
Ik snap d'r geen hout van. Maak een topic. Lees beginnershandleidingen door.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

  • Details
  • Marien xD
    Door:
    Marien xD
  • 8 jaar geleden
  • 2.975 x bekeken
  • Labels
  • Geen tags toegevoegd.