Onveilig paginasysteem?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 13:48

Saven

Administrator

Topicstarter
Goeienacht :P Even een korte vraag eigenlijk.
Ben bezig voor een klant met een kleine website, en heb daarvoor een heel simpel paginasysteempje gemaakt /index.php?p=xxxx je kent het wel :)

Nu doet de hoster een klein beetje moeilijk, en zegt dat mijn systeem niet helemaal veilig is. Ja als ik die $_GET ergens zou echo'en zonder te filteren zou dat html injection oid kunnen opleveren of meer. Maar dat is niet het geval. de $_GET['p'] wordt verder nergens gebruikt.

Dus ik vroeg mij af of de volgende code echt zo onveilig is?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

define('root', dirname(__FILE__).'/');
/////////////////////////////////////////////////////

function content()
{
    $folder = root.'/content/';
    
    if( isset($_GET['p']) && !empty($_GET['p']) )
    {
        $p = str_replace('.', '', $_GET['p']);
        
        $p = $folder.$p.'.php';
        
        if( file_exists($p) )
        {
            include_once($p);
        }
        else
        {
            include_once($folder.'homepage.php');
        }
    }
    else
    {
        include_once($folder.'homepage.php');
    }
}

?>


Alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Ja, dat is onveilig. Het is niet zo dat als je punten verwijderd dat je dan niet meer door je filesystem kunt lopen.

Tenzij je streng filtert met een regex of filter_var ben je op deze manier gewoon fout bezig.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • Grvy
  • Registratie: Juni 2008
  • Laatst online: 14:12

Grvy

Bot

Welke hoster is dat eigenlijk; ik wil er ook wel 1tje die gratis mn pagina's nakijkt op foute code :p

Dit is een account.


Acties:
  • 0 Henk 'm!

  • Pogostokje
  • Registratie: September 2001
  • Laatst online: 19-09 16:50

Pogostokje

* twiet *

Je hebt een browser gemaakt voor je filesystem. Gefeliciteerd. :)

... ook ik heb soms per ongeluk gelijk.


Acties:
  • 0 Henk 'm!

  • naam
  • Registratie: Oktober 2007
  • Laatst online: 20-09 22:03
Als je dit systeem wilt gebruiken kan ik je aanraden om het op de volgende manier te doen (dit is in ieder geval veiliger dan wat TS nu gebruikt)

PHP:
1
2
3
4
5
6
7
$page = $_GET['page'];
$allowedPages = array ('home', 'contact', 'etc'); // In deze array staan alle toegestane pagina's

if (in_array($page, $allowedPages))
{
  require(dirname(__FILE__) . '/' . $page . '.php'); 
}

Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 13:48

Saven

Administrator

Topicstarter
Het is toch aan de hoster om te zorgen dat die user niet buiten zijn eigen folders kan? Anders zou ik ook voor mezelf bij andere users in kunnen breken.. Lijkt me niet helemaal de bedoeling :P
krvabo schreef op zaterdag 17 juli 2010 @ 01:26:
Ja, dat is onveilig. Het is niet zo dat als je punten verwijderd dat je dan niet meer door je filesystem kunt lopen.

Tenzij je streng filtert met een regex of filter_var ben je op deze manier gewoon fout bezig.
Hm hoe willen ze er dan doorheen lopen?

Acties:
  • 0 Henk 'm!

  • Nijn
  • Registratie: Januari 2005
  • Laatst online: 10:12
Dat hangt helemaal van je systeem en instellingen af. Het gevaar hierin is encoding.

Een pure "../" heb je uitgeschakeld. Maar als je met verschillende encodings gaat werken kunnen er rare dingen gebeuren. Neem bijvoorbeeld %2e voor een ".". Nu, als ik je code zo lees gaat die niet direct werken, maar als je bijvoorbeeld naar unicode gaat kijken, er zijn filesystems die %u002e voor je omzetten in een ".". En zo niet, hoe weet je dat dat in de toekomst niet zo gaat zijn?

Als je software bouwt is het vaak verstandig om, zeker als het gaat om beveiliging, zo weinig mogelijk vertrouwen op externe variabelen. Dit is duidelijk een externe variabele die je heel gemakkelijk kunt wegwerken.

Een simpele regex als "[a-zA-Z0-9]+" voorkomt het al. Voldoet de string aan de regex? Laad de pagina. Anders: default. (Er staat [abc....z of ABC...Z of 0...9] één of meer keren)

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Saven schreef op zaterdag 17 juli 2010 @ 01:33:
Het is toch aan de hoster om te zorgen dat die user niet buiten zijn eigen folders kan? Anders zou ik ook voor mezelf bij andere users in kunnen breken.. Lijkt me niet helemaal de bedoeling :P
En wat dan als je in combinatie hiermee ook nog ergens een file-upload hebt die het mogelijk maakt scripts te uploaden omdat je beveiliging daar niet goed genoeg is? Dit is de helft van wat mensen nodig hebben om elke arbitraire code te laden die ze maar willen. Dus ja, gewoon een arraytje bijhouden van welke waarden die "p" mag hebben en lekker defaulten als 'ie een andere waarde bevat. Sim-pel. ;)

'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!

  • Saven
  • Registratie: December 2006
  • Laatst online: 13:48

Saven

Administrator

Topicstarter
user input vertrouwen deed ik eigenlijk al niet :P alleen ik was niet helemaal op de hoogte van die unicode dingen, en vond (en vind nog steeds) dat de hoster zn user zaakjes maar op orde moet hebben :)

Ik ga nog even kijken wat ik ga doen dan, of die filter_var/preg_match of die array :) thnx iig
Pietjepot schreef op zaterdag 17 juli 2010 @ 01:27:
Welke hoster is dat eigenlijk; ik wil er ook wel 1tje die gratis mn pagina's nakijkt op foute code :p
Ja is lang verhaal :P maar het is geen webhostingboer ofzo, tis een bedrijf die zn klanten host en normaal zelf websites voor die klanten verzorgt. Dus die waren niet zo happig op het feit dat een of ander kereltje even php komt dumpen op hun server ;)

[ Voor 44% gewijzigd door Saven op 17-07-2010 02:21 ]


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 12:22
Saven schreef op zaterdag 17 juli 2010 @ 01:24:
Goeienacht :P Even een korte vraag eigenlijk.
Ben bezig voor een klant met een kleine website, en heb daarvoor een heel simpel paginasysteempje gemaakt /index.php?p=xxxx je kent het wel :)
Wait, WHAT???
Dit soort probeerseltjes doe je voor de hobby op je eigen lokale webservertje. Daar ga je een betalende klant toch niet mee opzadelen?

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Saven schreef op zaterdag 17 juli 2010 @ 02:20:
user input vertrouwen deed ik eigenlijk al niet :P alleen ik was niet helemaal op de hoogte van die unicode dingen, en vond (en vind nog steeds) dat de hoster zn user zaakjes maar op orde moet hebben :)
Sorry hoor, maar jij moet je zaakjes op orde hebben als programmeur. Je kán en mág niet vertrouwen op zaken die buiten jouw macht liggen bij dit soort dingen die je in (letterlijk) 10 seconden potdicht geprogrammeerd hebt.

'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!

  • Saven
  • Registratie: December 2006
  • Laatst online: 13:48

Saven

Administrator

Topicstarter
mcDavid schreef op zaterdag 17 juli 2010 @ 02:21:
[...]


Wait, WHAT???
Dit soort probeerseltjes doe je voor de hobby op je eigen lokale webservertje. Daar ga je een betalende klant toch niet mee opzadelen?
:') ej sorry man wist niet dat je boos werd
maareh simpel en dient zn doel. het is zoiets simpels als dit, of statische html pagina's maken.

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Saven schreef op zaterdag 17 juli 2010 @ 02:23:
[...]

:') ej sorry man wist niet dat je boos werd
maareh simpel en dient zn doel. het is zoiets simpels als dit, of statische html pagina's maken.
Niet om lullig te doen, maar als je dit soort potentiële beveiligingslekken zelf niet kan spotten, zelfs niet nadat je hoster het je aangewezen heeft, dan is zo'n statische HTML-site nog niet eens zo'n slecht plan. :)

'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!

  • Saven
  • Registratie: December 2006
  • Laatst online: 13:48

Saven

Administrator

Topicstarter
Nee snap ik. Ik ben zelf wel redelijk op de hoogte met dat soort dingen hoor ;) Ik vind het alleen nog steeds niet mijn probleem als de hoster zn userrechten niet goed heeft geregeld :P maar dat van die %u002e wist ik inderdaad nog niet. Dus daar hou ik in het vervolg wel rekening mee door even de input te filteren (alleen a-z)

Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 12:22
Wat NMe zegt. Waarschijnlijk werkt dat zelfs nog makkelijker ook dan, omdat het dan met dreamweaver ofzo te onderhouden is. Altijd nog beter dan je klant met een text-editor zijn FTP-account op sturen met grote kans dat hij iets sloopt door zijn onkunde.

Daarom doe je ditsoort projectjes ook voor de hobby, om van te leren. Voor een klant installeer je gewoon een CMS.

-edit-
Ik ben zelf ook door schade en schande wijs geworden hoor, vandaar mijn reacties zo :+

[ Voor 11% gewijzigd door mcDavid op 17-07-2010 02:31 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Saven schreef op zaterdag 17 juli 2010 @ 02:20:
Ja is lang verhaal :P maar het is geen webhostingboer ofzo, tis een bedrijf die zn klanten host en normaal zelf websites voor die klanten verzorgt. Dus die waren niet zo happig op het feit dat een of ander kereltje even php komt dumpen op hun server ;)
Ik zou ook niet blij worden als je het op mijn servers kwam dumpen inderdaad. Ik ben degene die uit bed gebeld wordt als het stuk is, dan mag jij raden wie de factuur krijgt voor mijn nachtwerk. Het is jouw verantwoordelijkheid om goede code te schrijven. Zeker bij dit soort basics als "never trust user input".

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Even een tip:

Doe voortaan aan white listing, ipv aan black listing. Met black listing (zoals jij hier doet, de . is verboden) kom je altijd in de problemen omdat er altijd wel iemand die een slim trucje heeft om hier omheen te werken. Beter is het om alleen bepaalde letters toe te staan (zoals a-Z). Dit is veel minder fout gevoelig.

Oja en misschien is de OWASP top 10 een handig lijstje voor je.

Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 19-09 20:56
Als we dan toch bezig zijn include, include_once, require en require_once zijn statements en geen functions. Verder denk ik dat je in deze context include of require wil gebruiken ipv include_once. Daarnaast is het tegenwoordig bestpractice als je de ?> in php bestanden weglaat.

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 14:51

Sebazzz

3dp

freakingme schreef op zaterdag 17 juli 2010 @ 12:35:
Daarnaast is het tegenwoordig bestpractice als je de ?> in php bestanden weglaat.
Is dat volgens jou of volgens enkele hoogstaande software engineers?

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Mwoach, hoogstaand. ZEND enforced het (bron). In mijn opinie is het zinloze symptoombestrijding en hoor je ze gewoon te gebruiken.

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • kevinkrs
  • Registratie: Juni 2010
  • Laatst online: 15-09 22:47
freakingme schreef op zaterdag 17 juli 2010 @ 12:35:
Als we dan toch bezig zijn include, include_once, require en require_once zijn statements en geen functions. Verder denk ik dat je in deze context include of require wil gebruiken ipv include_once. Daarnaast is het tegenwoordig bestpractice als je de ?> in php bestanden weglaat.
Hoezo weglaat?
Zover ik weet moet je php ook gewoon afsluiten...

Acties:
  • 0 Henk 'm!

  • Palomar
  • Registratie: Februari 2000
  • Niet online
Saven schreef op zaterdag 17 juli 2010 @ 02:29:
Nee snap ik. Ik ben zelf wel redelijk op de hoogte met dat soort dingen hoor ;) Ik vind het alleen nog steeds niet mijn probleem als de hoster zn userrechten niet goed heeft geregeld :P
Maar ook binnen je eigen workspace wil je niet hebben dat mensen andere info kunnen zien dan ze eigenlijk mogen zien (bijv. dat bestandje met adressen of aanmeldingen).
Vaak genoeg sites die op zo'n manier 'gehackt' worden, waarbij persoonsgegevens op straat komen te liggen.

Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 19-09 20:56
kevinkrs schreef op zaterdag 17 juli 2010 @ 12:56:
[...]

Hoezo weglaat?
Zover ik weet moet je php ook gewoon afsluiten...
De ZF codingstandards en die van bijv. Drupal, Symfony en phpBB4 schrijven dit voor omdat wanneer je een keer per ongeluk een spatie achter een ?> zet je fouten kan krijgen in de trend van 'headers already sent' etc. Als je ?> weglaat dan heb je hier nooit meer last van ;)

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
kevinkrs schreef op zaterdag 17 juli 2010 @ 12:56:
[...]

Hoezo weglaat?
Zover ik weet moet je php ook gewoon afsluiten...
Het argument is dat het aan het einde van het script niet hoeft, php weet dan zelf dat hij af moet sluiten.

Imho is het lazy-coding ( waarom zou je bijv nog een mysql-connectie afsluiten dan ).

Maar strikt noodzakelijk is de ?> niet nodig aan het einde van het script

Acties:
  • 0 Henk 'm!

Verwijderd

Je script is zeker wel veilig, ik bedoel het is beter als je alle mogelijke waardes van je GET in een array zou stoppen en vervolgens zou controleren of die erin zit.

Maar het is iniedergeval niet zo dat bijvoorbeeld iemand anders zijn PHP pagina vanaf het internet in joun website kan "include" en vervolgens alle variable kan uitlezen doordat file_exists alleen true reageert als het bestand lokaal staat en niet extern.

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

De ?> weglaten wordt inderdaad door Zend aangeraden maar ik voel me daar zelf ook niet zo happy bij. Ik zorg wel dat ik geen witregels achter mijn ?> heb staan. Los daarvan: het is dus inderdaad best practice volgens "de authoriteiten". :)

'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!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Gomez12 schreef op zaterdag 17 juli 2010 @ 13:07:
waarom zou je bijv nog een mysql-connectie afsluiten dan
offtopic:
Omdat persistente connecties (soms) sneller zijn ;)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 17 juli 2010 @ 13:09:
Je script is zeker wel veilig, ik bedoel het is beter als je alle mogelijke waardes van je GET in een array zou stoppen en vervolgens zou controleren of die erin zit.

Maar het is iniedergeval niet zo dat bijvoorbeeld iemand anders zijn PHP pagina vanaf het internet in joun website kan "include" en vervolgens alle variable kan uitlezen doordat file_exists alleen true reageert als het bestand lokaal staat en niet extern.
Hoe kom je hier bij? Het script is namelijk niet veilig. Er wordt geen rekening gehouden met character encodings, verder zou je prima via url includes kunnen doen, je weet namelijk niks van de instellingen van de hoster.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En je kan niet garanderen dat je nooit zelf een bestand introduceert dat niet op deze manier benaderd mag worden, of misschien zelfs dat iemand anders dat doet. ;)

Dit is gewoon 100% fout, en iedereen die het verdedigt moet een andere hobby zoeken.

{signature}


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

NMe schreef op zaterdag 17 juli 2010 @ 13:11:
De ?> weglaten wordt inderdaad door Zend aangeraden maar ik voel me daar zelf ook niet zo happy bij. Ik zorg wel dat ik geen witregels achter mijn ?> heb staan. Los daarvan: het is dus inderdaad best practice volgens "de authoriteiten". :)
Ooit druk ik die coding standaarden er nog wel door op kantoor :P

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 06:21
Ik vraag me eigenlijk af waarom je niet gewoon een framework gaat gebruiken in plaats van zelf iets inelkaar probeert te prutsen? Een include doen aan de hand van $_GET input? Doe dan iets als
PHP:
1
2
3
4
5
6
7
8
9
if(array_key_exists($_GET['p'])){

switch($_GET['p']){
 case "bla1":
 case "bla2":
 default:
  die ( "go away!");
}
}


Zoals al is gezegd verminder je dan de kans dat er iets included wordt dat je niet wilt etc etc.. Maar ik vind het eigenlijk zowiezo ranzig om via een $_GET['p'] te bepalen wat je include. Je moet een vast model hebben waarin de $_GET bepaald wat je uit de database moet trekken indirect (bijvoorbeeld $_GET['contenttype'] icm een $_GET['id'] ) content type bepaalt dan hoe je je view opbouwt ( welke classes je moet laden en dergelijke en welke php files je nodig hebt hiervoor) en het ID nadat je het gecontroleerd hebt met op zijn minst is_numeric (...) bepaald welk item je uit de db trekt.

Wees maar blij dat inderdaad je hoster je er op wijst dat wat jij doet niet slim is.

nu is alleen op is_numeric checken natuurlijk ook niet voldoende helemaal veilig maar ik hoop dat je het idee door krijgt. Vertrouw NOOIT op spul dat je via $_GET/$_POST of welk ander user generated content binnen krijgt.

[ Voor 3% gewijzigd door Webgnome op 17-07-2010 18:30 ]

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 14:51

Sebazzz

3dp

Ik vraag me eigenlijk af waarom je niet gewoon een framework gaat gebruiken in plaats van zelf iets in elkaar probeert te prutsen?
Waarom is een compleet framework nodig als de gebruiker alleen statische HTML pagina's bij elkaar wilt voegen? De TS wil gewoon dat in een vaste pagina de juiste content in zijn div/table en title tags worden gezet. Een include is dan voldoende en een compleet framework is dan niet nodig imo.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 12:22
Sebazzz schreef op zaterdag 17 juli 2010 @ 18:35:
[...]
Waarom is een compleet framework nodig als de gebruiker alleen statische HTML pagina's bij elkaar wilt voegen? De TS wil gewoon dat in een vaste pagina de juiste content in zijn div/table en title tags worden gezet. Een include is dan voldoende en een compleet framework is dan niet nodig imo.
Als het om zoiets simpels gaat, kun je beter "the other way around" werken. en <? include header.php; ?> invoegen.

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Webgnome schreef op zaterdag 17 juli 2010 @ 18:28:
Maar ik vind het eigenlijk zowiezo ranzig om via een $_GET['p'] te bepalen wat je include. Je moet een vast model hebben waarin de $_GET bepaald wat je uit de database moet trekken indirect (bijvoorbeeld $_GET['contenttype'] icm een $_GET['id'] ) content type bepaalt dan hoe je je view opbouwt ( welke classes je moet laden en dergelijke en welke php files je nodig hebt hiervoor) en het ID nadat je het gecontroleerd hebt met op zijn minst is_numeric (...) bepaald welk item je uit de db trekt.
Oh? Ik heb anders een tijdje geleden een groot systeem geschreven wat aan de hand van $_GET parameters de juiste file inlaadde, een instantie aanmaakte van de class en daarna methods ging aanroepen met variabelen uit de $_GET. Dat alles volstrekte en 100% veilig én zonder whitelisting.

Als je nadenkt over een goede architectuur van je systeem heb je geen database nodig voor dat soort simpele dingen. Goede filtering is alles wat je nodig hebt.
nu is alleen op is_numeric checken natuurlijk ook niet voldoende helemaal veilig maar ik hoop dat je het idee door krijgt. Vertrouw NOOIT op spul dat je via $_GET/$_POST of welk ander user generated content binnen krijgt.
Waarom is controleren op is_numeric niet helemaal veilig?
PHP:
1
$sSql = 'SELECT content FROM page WHERE id='.(int)$_GET['id'].' LIMIT 1';

Volstrekte veilig. Dat je in principe ook een 0 als id naar je database kunt gooien maakt het niet minder veilig, hooguit kun je eens een lege resultset krijgen. Maargoed, dat is ook wel af te vangen ;)
Desnoods maak je er zoiets van:
PHP:
1
$sSql = 'SELECT content FROM page WHERE id='.((int)$_GET['id'] >0 ? (int)$_GET['id'] : 1).' LIMIT 1';

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 06:21
nvm..

[ Voor 95% gewijzigd door Webgnome op 17-07-2010 23:26 ]

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Webgnome schreef op zaterdag 17 juli 2010 @ 22:18:
Over is_numeric en sql Ik weet niet of dit nog helemaal klopt trouwens.
Daar staat nergens dat het niet veilig is...

'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
Het kan wel voor onverwachte resultaten zorgen ieder geval als iemand "?id=1e4" meegeeft en dat gewoon jouw is_numeric-check passeert. Om die reden gebruik ik eigenlijk altijd ctype_digit().

Acties:
  • 0 Henk 'm!

  • MorosMyrddin
  • Registratie: Juni 2008
  • Laatst online: 11-08 20:23

MorosMyrddin

Zet die Ploat af !!

krvabo schreef op zaterdag 17 juli 2010 @ 21:24:

Waarom is controleren op is_numeric niet helemaal veilig?
PHP:
1
$sSql = 'SELECT content FROM page WHERE id='.(int)$_GET['id'].' LIMIT 1';

Volstrekte veilig. Dat je in principe ook een 0 als id naar je database kunt gooien maakt het niet minder veilig, hooguit kun je eens een lege resultset krijgen. Maargoed, dat is ook wel af te vangen ;)
ik vraag me af of dit inderdaad de simpelste en beste methode is om een id te checken...
nog iemand die zich hier kan in vinden ?
EDIT: na wat testen lijkt dit inderdaad wel een simpele werkende oplossing, en moet je niet beginnen je query testen of andere methodes er op los gooien.

wat je natuurlijk ook kunt doen is via .htaccess werken, die " index.php?p= " direct ook weg werken en in je htaccess de nodige controle steken.

[ Voor 20% gewijzigd door MorosMyrddin op 18-07-2010 15:54 ]


Acties:
  • 0 Henk 'm!

  • ChessSpider
  • Registratie: Mei 2006
  • Laatst online: 01-08 19:01
ach ik gebruik intval(), maar casten naar een INT is voor IDs zeker de beste manier. Voor andere dingen gebruik je gewoon mysqli_real_escape_string, of nog beter STMT. En verder, zoals al is gezegd hier; whitelisting > blacklisting.

Er zijn ook verschillende gemene truukjes uit te voeren met o.a. unicode en functies als htmlentities.

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Mja, het kunnen aanpassen van een ID om een andere pagina te kunnen kijken lijkt mij niet een heel erg groot probleem voor simpele sites met losse pagina's. Het wordt echter een ander probleem als je ook bijvoorbeeld je beheerspagina's een ID meegeeft, of als je privéinformatie van mensen op zo'n pagina zet (en het beveiligt met 'er zijn geen links naartoe op openbare pagina's').

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
YopY schreef op maandag 19 juli 2010 @ 09:15:
Mja, het kunnen aanpassen van een ID om een andere pagina te kunnen kijken lijkt mij niet een heel erg groot probleem voor simpele sites met losse pagina's. Het wordt echter een ander probleem als je ook bijvoorbeeld je beheerspagina's een ID meegeeft, of als je privéinformatie van mensen op zo'n pagina zet (en het beveiligt met 'er zijn geen links naartoe op openbare pagina's').
Dat is niet het probleem van het kunnen aanpassen van het ID, maar een probleem van de autorisatie op de pagina's

“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!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Als "ik link er niet naartoe" de beveiliging is van je pagina dan doe je sowieso al iets grandioos verkeerd inderdaad :+

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

krvabo schreef op zaterdag 17 juli 2010 @ 21:24:
[...]


PHP:
1
$sSql = 'SELECT content FROM page WHERE id='.(int)$_GET['id'].' LIMIT 1';

Volstrekte veilig. Dat je in principe ook een 0 als id naar je database kunt gooien maakt het niet minder veilig, hooguit kun je eens een lege resultset krijgen. Maargoed, dat is ook wel af te vangen ;)
Persoonlijk ben ik een voorstander van sprintf.
PHP:
1
2
$sSql = sprintf( 'SELECT content FROM page WHERE id = %d LIMIT 1',
                 $_GET['id']);

of
PHP:
1
2
$sSql = sprintf( 'SELECT content FROM page WHERE id = %d LIMIT 1',
                 (int)$_GET['id'] >0 ? (int)$_GET['id'] : 1);

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Persoonlijke voorkeur is in deze niet zo bijster interessant. Hou het liever bij discussie waarom het door TS voorgestelde systeem niet veilig is.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
LuCarD schreef op maandag 19 juli 2010 @ 10:50:
Persoonlijk ben ik een voorstander van sprintf.
Stiekem ben je een voorstander van prepared statements, ;).
Dat is niet het probleem van het kunnen aanpassen van het ID, maar een probleem van de autorisatie op de pagina's
Inderdaad. Wat ik probeer te zeggen: Beter om dit soort dingen te voorkomen dan om er later nog een keer achter te komen dat je systeem eigenlijk in eerste instantie niet goed was / is.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
YopY schreef op maandag 19 juli 2010 @ 11:47:
[...]
Inderdaad. Wat ik probeer te zeggen: Beter om dit soort dingen te voorkomen dan om er later nog een keer achter te komen dat je systeem eigenlijk in eerste instantie niet goed was / is.
Tuurlijk, maar dan moet je je niet richten op het feit dat je door een simpele aanpassing in de URL op een andere pagina kan komen, dat hoort totaal niet erg te zijn. Je moet gewoon vanaf het begin af aan goed nadenken hoe je je authenticatie en autorisatie gaat regelen.

“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!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Verwijderd schreef op zaterdag 17 juli 2010 @ 13:09:
Je script is zeker wel veilig, ik bedoel het is beter als je alle mogelijke waardes van je GET in een array zou stoppen en vervolgens zou controleren of die erin zit.

Maar het is iniedergeval niet zo dat bijvoorbeeld iemand anders zijn PHP pagina vanaf het internet in joun website kan "include" en vervolgens alle variable kan uitlezen doordat file_exists alleen true reageert als het bestand lokaal staat en niet extern.
Je bent sarcastisch, toch? TOCH?

We are shaping the future


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Alex) schreef op maandag 19 juli 2010 @ 16:56:
[...]

Je bent sarcastisch, toch? TOCH?
Alle webservers hebben allow_url_fopen toch zeker uit staan?!?!?!?! :P

'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!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

NMe schreef op maandag 19 juli 2010 @ 17:31:
[...]

Alle webservers hebben allow_url_fopen toch zeker uit staan?!?!?!?! :P
Mwah... met het prefixen van de huidige directory en een andere directory houden de meeste http links er wel mee op hoor :+

Maar afgezien van of het veilig is of niet, deze oplossing is m.i. uitermate ranzig en zou ik nooit _willen_ gebruiken.

Blog [Stackoverflow] [LinkedIn]

Pagina: 1