login  Naam:   Wachtwoord: 
Registreer je!
 Forum

allowed includes check

Offline Guardian - 27/02/2006 13:02 (laatste wijziging 27/02/2006 13:02)
Avatar van GuardianNieuw lid hallo allemaal,

ik ben een include script aan het maken die dus de content van je pages include in een <td>
maar daar het vanaf php 5.0 ook mogelijk is externe files te include wil ik ook hem laten checken of de include wel degelijk is toegelaten...

Maar, hij doet het dus niet 
er gebeurt gewoon niets en ik denk dat ik me erop blind aan het staren ben...mss zien jullie het?

  1. function allowedInc($page)
  2. {
  3. //array met daarin alle allowed includes.
  4. $allowedinc = array(
  5. "1" => "home",
  6. "2" => "contact",
  7. );
  8.  
  9. //de array doorlopen en het laten returnen als hij de page gevonden heeft.
  10. for($i = 0; $i < count($allowedinc); $i++)
  11. {
  12. if($page == $allowedinc[$i])
  13. {
  14. return true;
  15. }
  16. }
  17. return false;
  18.  
  19. }//haakje van function

dit is de functie die nagaat of de include wel degelijk toegestaan is.

dit is de code voor de include:
  1. if(isset($_GET["page"]))
  2. {
  3. $page = $_GET["page"];
  4. if(file_exists($page.".php"))
  5. {
  6. if(allowedInc($page) == true)
  7. {
  8. include($page.".php");
  9. }
  10. else
  11. {
  12. die("Hacking attempt, include not allowed!");
  13. }
  14. }
  15. else
  16. {
  17. echo("Error 404, Page not found.");
  18. }
  19. }//haakje van isset
  20. else
  21. {
  22. include("home.php");
  23. }

16 antwoorden

Gesponsorde links
Offline Voldemort - 27/02/2006 13:23 (laatste wijziging 27/02/2006 13:23)
Avatar van Voldemort PHP ver gevorderde if(allowedInc($page) == true)

=>

if(allowedInc($page) === true)

Zo doe ik het toch altijd en dat werkt.
Offline Button - 27/02/2006 13:23
Avatar van Button PHP ver gevorderde i.p.v. van de array te doorlopen met die for-lus kan je misschien gewoon in_array() te gebruiken?

  1. in_array($page,$allowedinc);


of je gebruikt gewoon het switch()-statement dat ook veilig is, zie overigens de tut hier op sima:
veilige paginasysteem
Offline Guardian - 27/02/2006 13:32
Avatar van Guardian Nieuw lid dit zijn allemaal, euhm...efficientere manieren idd maar zit er ergens echt een fout in waardoor ie niet werkt?
:s
Offline Thomas - 27/02/2006 13:39
Avatar van Thomas Moderator Alles wat je include, include je toch lokaal?
Als jij een lijst maakt van toegestane lokale includes dan kan er weinig misgaan.
Offline Guardian - 27/02/2006 13:43 (laatste wijziging 27/02/2006 13:57)
Avatar van Guardian Nieuw lid waarom gaat het dan toch mis?:'(
[edit]
oki kan iemand dit even voor me verklaren?
ik heb de <? ?> tags verandert in <?php en dan ging het 
Offline Thomas - 27/02/2006 14:27
Avatar van Thomas Moderator De instelling short_open_tag staat uit op jouw server.

Voer de functie phpinfo(); uit om te zien hoe jouw server-instellingen luiden.
Offline Richard - 27/02/2006 15:42
Avatar van Richard Crew algemeen ButtonMan: met een enkel dingetje is in_array niet slecht, maar als je het binnen een loop gaat doen, is isset op een array_flip'ped array VEEL sneller. in_array loopt alle elementen langs, isset kan op de array sleutel controleren. (array_key_exists moet je ook niet gebruiken, is in_array op array_flip'ped;))
Offline Button - 27/02/2006 16:05
Avatar van Button PHP ver gevorderde array_flip'ped? maar als je in_array gaat gebruiken, heb je die loop toch niet meer nodig?
en wat bedoel je juist met isset kan op de sleutel controleren?
Offline Richard - 27/02/2006 16:07
Avatar van Richard Crew algemeen isset controleert of de key in de array bestaat (of beter gezegd, checked of een variabele geset is). dit gaat VEEL sneller.

wat in array is, is zeg maar een foreach, die iedere value controleert (niet de key). dit kan ZEER CPU intensief zijn.
Offline Button - 27/02/2006 16:10 (laatste wijziging 27/02/2006 16:11)
Avatar van Button PHP ver gevorderde ja ok , maar kun je dat dan gebruiken in z'on script als hij gebruikt? want hij eigenlijk zie ik niets van isset in zijn script staan?

en edit: wat bedoel je met array_flip'ped?
edit2: bedoel je met die array gewoon de superglobal?
Offline Richard - 27/02/2006 16:11
Avatar van Richard Crew algemeen PHP.net: array_flip ;)
Offline Button - 27/02/2006 16:20 (laatste wijziging 27/02/2006 16:27)
Avatar van Button PHP ver gevorderde dus als jij zoiets zou checken dan zou jij het zo doen (anders gezegd: jij bedoelt zoiets :d):
  1. $allowedinc = array(
  2. "1" => "home",
  3. "2" => "contact",
  4. );
  5. $allowedinc = array_flip($allowedinc);
  6. if(isset($allowedinc[$page]){
  7. include($page."php");
  8. }


?
Offline Thomas - 27/02/2006 16:44
Avatar van Thomas Moderator Het is toch niet zo dat je pagina uit 1.000.000+ pagina's bestaat, dus die ene 0.0000001s die je bespaart met array_flip() t.o.v. in_array()...
Offline Richard - 27/02/2006 17:13
Avatar van Richard Crew algemeen ik zei ook, in _dit_ geval maakt het niet uit. maar als je het in een loop doet WEL.
Offline Button - 27/02/2006 17:59
Avatar van Button PHP ver gevorderde laten we gewoon switch() gebruiken om pagina's te include 
Offline Guardian - 27/02/2006 22:19
Avatar van Guardian Nieuw lid bedankt voor jullie meningen 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.24s