Autor | Zpráva | ||
---|---|---|---|
lexlutor Profil * |
#1 · Zasláno: 1. 2. 2006, 16:09:08
<?php
$filename = "/knihy/".$_GET["page" ]. ".html"; if (File_Exists ($filename)): include("$filename"); else: include("uvod.php"); endif; ?> Prečo je nebezpečný tento kód a ako ho ošetriť aby nebezpečný nebol. Ďakujem |
||
WertriK Profil * |
#2 · Zasláno: 1. 2. 2006, 16:22:43
Zas tak moz nebezpecny neni ( rozhodne bezpecnejsi nez muj :) ), dela se to (doufam) pres switch :
switch($page): case "kniha": $filename = "book/book.php"; break; case "novinky": $filename = "news.php"; break; default: $filename = "news.php"; endswitch; Nebo jeste pres RewriteMod, to je slozitejsi ..... |
||
splite Profil |
#3 · Zasláno: 1. 2. 2006, 19:43:56 · Upravil/a: splite
Nebezpecný díky tomu .".html" není - takhle se dají vypsat pouze soubory ve formě .html a v nich asi žádné citlivé údaje nebudou.
Problém by byl pokud by jsi měl script:
a jako url třeba
protože pak by si mohl bandita manipulací s url nechat vypsat cokoliv v dosahu php. Tradičně se jako příklad dává soubor s hesly v Linuxu index.php?page=/dev/passwd index.php?page=/etc/passwd index.php?page=/bin/passwd index.php?page=/usr/passwd a nebo prostě hesla v .htaccess index.php?page=.htpasswds spoustu věcí se dá zabránit vhodným nastavením php potažmo apache, ale někde jsou amatéři admini a takovýto útok se dá lehce provést. |
||
krteczek Profil |
#4 · Zasláno: 3. 2. 2006, 09:18:56
navíc není dobré nekonečné zanoření indexu page=index || page=index.php podle toho jak je řešen skript, jestli se předává celý název stránky
Takže taková konstrukce:
opravdu není bezpečná! Bezpečnější je:
1. podmínka vylouří zanoření indexu (předpokládá se že stránky je index.php) 2. ./ znamená že se to vstahuje k tomuto adresáři, nemělo by dojít k vypsání výše zmíněných hesel (splite). Do zanořeného adresáře se dostanete $page="./cesta/k/souboru/".$_GET['page'].".php"; 3. sám volím kombinaci switch + ./ navíc na includovaných stránkách je vždycky funkce, kterou volám po include takže jeden ten case vypadá nějak takhle:
krteczek |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0