[php] security issue statische pagina's

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik vroeg me af hoe ik include pagina's kan beveiligen tegen code injectie.

Als ik bijvoorbeeld het volgende doe:

test.html bevat:

<?echo "test";?>

als ik test.html aanroep gebeurt er niks. PHP code wordt niet uitgevoerd.

echter als ik nu het volgende doe:

test.php bevat:

include("test.html");

en ik roep dan test.php aan. Dan wordt de php code in test.html wel uitgevoerd.

Heeft iemand misschien een oplossing hoe ik dit anders kan doen?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kwestie van escapen :? Wat je beschrijft is gewoon gedocumenteerd behaviour van include().
Maar waarom zou je zoiets uberhaupt doen? Waarom gebruik je niet readfile, fopen() :?

Hoe dan ook dit is gewoon een kwestie van documentatie lezen.

[ Voor 84% gewijzigd door RobIII op 03-10-2006 14:15 ]

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!

  • martennis
  • Registratie: Juli 2005
  • Laatst online: 07-07 10:36
moet het niet test.php zijn?

[ Voor 11% gewijzigd door martennis op 03-10-2006 14:24 ]


Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

martennis: Nee :) . Het punt is dat * RSD verwacht dat als je een html bestand include deze als html bestand gelezen wordt, en dat code tussen <?php en ?> dus niet tot uitvoering komt. Het is echter zo dat include dat wel doet. Wat zoals * RobIII aangeeft ook gewoon de bedoeling is :) .

Test.php include dus test.html. Als ze allebei test.php zouden heten zou het op zich niets uitmaken, behalve dat bij het direct bekijken van test.php de code ook al uitgevoerd zou worden.

DM!


Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 20-09 16:56

xces

To got or not to got..

En als je test.html wilt "printen" moet je dit doen:
PHP:
1
2
3
<?php
echo file_get_contents('test.html');
?>

Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
Tsja, HTML pagina's worden standaard niet als PHP pagina's gezien. Als je dat wel wil, moet je Apache/IIS zo instellen. Als je echter een PHP bestand een html bestand laat includen, wordt dat in de parser van PHP gedaan, met als gevolg dat het geinclude bestand ook geparsed gaat worden, en dat php code daarin ook uitgevoerd gaat worden.

Wat betreft "Code injection", doe gewoon input validatie en gebruik vaste includes en je zal, denk ik, de meeste dingen wel afgevangen hebben.

Copy.com


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik gebruik nu ook file_get_contents, maar ik heb het idee dat een include veel sneller is of makat dat niet uit?

Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

RSD: Of het sneller is of niet maakt lijkt me niet zo heel veel uit, het doet niet wat je wil :) . Daarnaast lijkt het me dat het parsen van een file langer duurt dan alleen de inhoud opneemt. je zou dus zeggen dat file_get_contents sneller is.

DM!


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
In eerste instantie deed het wel wat ik wou, echter kwam ik er achter dat je zo php code kan injecteren. Eigenlijk bestwel stom van me, want je kan ook .inc files erin zetten etc en die gaat hij ook bij langs, dus eigenlijk had ik het moeten weten. Dus dan maar file_get_contents gebruiken.

Acties:
  • 0 Henk 'm!

  • Pin0
  • Registratie: November 2002
  • Niet online
Wil de TS voorkomen dat men door bijv. de url te veranderen een externe pagina include dan voldoet volgens mij een ./ voor de te includen file dus:

include("./test.html");

Wellicht is één en ander ook afhankelijk van de webserver, je kan deze ook zo instellen dat php ook html pagina's parsed of niet...

Mijn Lego Mocs - LEGO idea: The Motorcycle Garage


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Het gaat erom dat de html pagina's niet worden geparsed die geinclude worden. Ik dacht dat dat niet gebeurde. Echter als file_get_contents sneller is dan een include, dan gebruik ik dat :)

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Hoe kan ik bijvoorbeeld mensen een eigen php file laten includen doe op hun eigen server wordt ge-output? Zijn daar manieren voor? Dus bijv:

[include=http://www.willem.nl/mijninclude.php]

en dat ik dan die gegevens ophaal die daar staan en op die plaats include.

[ Voor 34% gewijzigd door RSD op 03-10-2006 16:57 ]


Acties:
  • 0 Henk 'm!

  • R4NCOR
  • Registratie: December 2000
  • Laatst online: 16-09 12:26

R4NCOR

eigenlijk gewoon Niels

Dat wordt wel vrij basic hoor.... Je kunt met een reguliere expressie die URL uit de tag lezen, die in een variabele stoppen en die variabele weer in een file_get_contents() pleuren. ;)

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Voor mij is het niet basic in ieder geval. Ik had zoiets in gedachte:

$x = file_get_contents("test.html");

echo $x;
echo preg_replace_callback("/[url=(.*)]/siU","file_get_contents",$x);

Maar dat werkt ook niet.

Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
Ik bescherm mezelf enkel tegen het includen van verkeerde statische bestanden. Daarvoor maak ik een soort sandbox aan voor statische pag's. VB
PHP:
1
include('./dynamic/'.$some_page_you_want_to_include.'.ext');


$some_page_you_want_to_include wordt natuurlijk ontdaan van mogelijkheden om te ontsnappen uit de 'static'-sandbox. (vb: .. eruitknippen)

\edit: ik lieg, ik include enkel dynamische pagina's. Statische worden met een lees-functie erin gegooid.

[ Voor 17% gewijzigd door moozzuzz op 03-10-2006 17:34 ]

Pagina: 1