Avatar
kom72
Člen
Avatar
kom72:

Ahoj,
jako naprostý PHP analfabet, jsem se pustil do překopání svých statických stránek na stránky využívající PHP a MySQL. http://www.kom72.cz/index.php
Podle jakéhosi návodu na webu, jsem udělal to, že mám hlavní stránku index.php, kde mám hlavičku, menu, patičku a pouze do ní pomocí příkazu

include

vkládám do určité části obsah. Udelal jsem si slozky OBSAH (kde mám php stránky s jednotlivým obsahem) a DEFINICE (kde mám např. kód prave na nacitani stranek do obsahu, scripty z hlavikcy atd.) Otázka zní, je to takto bezpečné a správně pojaté?
Ještě přikládám zatím na kontrolu kód na skládání jednotlivých stránek webu. Díky za váš čas a ochotu poradit.

Volání kódu:

<?php include ("definice/skladani_stranek.php"); ?>

Kód:

<?php
        if (isset($_GET['stranka']))
            $stranka = $_GET['stranka'];
        else
            $stranka = 'uvod'; // pokud parametr není zadaný, zobrazí se tento obsah
        if (preg_match('/^[a-z0-9_]+$/', $stranka)) // zabezpečení -> v hranaté závorce jsou povolené pismena, cislice a podtržítko, ktera se mohou objevit za: index.php?stranka=
        {
            $vlozeno = include('obsah/' . $stranka . '.php');
            if (!$vlozeno)
                echo('Obsah nenalezen');
        }
        else
            echo('Neplatný parametr.');
?>
 
Odpovědět  -1 28. února 7:40
Avatar
Deart
Redaktor
Avatar
Deart:

Doporučuji všechny proměnné které může uživatel nějakým způsobem ovlivňovat ošetřit funkcí htmlspecialchars.

$stranka=htmlspecialchars($_GET['stranka']);

Do první podmínky bych ještě přidal...

&& !empty($_GET['stranka']))

Pak by bylo ještě vhodné ošetřit zda požadovaný soubor existuje.

 
Nahoru Odpovědět  -1 28. února 19:03
Avatar
Petr Juhanak
Člen
Avatar
Petr Juhanak:

Ahoj,
podívej se na OWASP projekt ESAPI, to jsou knihovny pro validaci vstupních dat, která je dostupná i pro PHP. Jinak validaci hodnot v byznys/aplikační logice bys měl dělat taky, to za tebe bezpečnostní knihovna neudělá.

Petr

 
Nahoru Odpovědět 11. července 20:48
Avatar
Martin Konečný (pavelco1998):

A mně zas přijdou obě odpovědi mimo mísu :D
htmlSpecialChars je tady úplně useless a podmínka isset stačí. Jelikož je tazatel začátečník, pak řešit nějakou velkou security je trochu nad rámec.

@kom72: Tady je cílem v podstatě jen to, aby se podle parmetru v URL vložil správný soubor. Pokud parametr neexistuje, použije se "uvod" jako default, OK. To ti zabrání errorům typu "notice: undefined index 'stranka' in ...".
Pak potřebuješ zamezit možnosti vložení jiného souboru, než které jsou povolené (typická chyba při include $_GET["stranka"]). Ten regulární výraz mi na to připadá OK.

Mám pocit, že include ti hodí notice, pokud daný soubor neexistuje. Osobně bych to raději pořešil funkcí file_exists().

Jinak se mi to zdá v pohodě.

 
Nahoru Odpovědět  +2 11. července 21:41
Avatar
sunspinx
Člen
Avatar
sunspinx:

Ja na svojej stranke to mam poriesene takto, neviem ake bezpecne to je, ale urcite kratsie ako tvoje riesenie

if (isset($_GET['page']))
            {
                $page = $_GET['page'];
                if (file_exists('sub/' . $page . '.php'))
                {
                    include('sub/' . $page . '.php');
                }
                else
                    include('sub/error404.php');
            }
            else
            {
                include('sub/home.php');
            }
 
Nahoru Odpovědět  -1 12. července 9:26
Avatar
Odpovídá na sunspinx
Martin Konečný (pavelco1998):

takhle se můžu dostat i k úplně jiným souborům, když ti do URL hodim "../"

 
Nahoru Odpovědět 12. července 12:03
Avatar
sunspinx
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
sunspinx:

vtedy by ti to malo vyhodit 404, ak sa budes pokusat nejaky otvorit nie?

 
Nahoru Odpovědět 12. července 14:00
Avatar
Odpovídá na sunspinx
Martin Konečný (pavelco1998):

Pokud ten soubor bude existovat, pak se prostě vloží :) když ti pak vyjde třeba

include "sub/../../../soubor.php";

tak je to jako bys měl jenom

include "../../soubor.php";

a najednou se ti do obsahu vloží soubor, který by se vůbec vložit neměl (mimo složku sub).
Myslim, že v tomhle nepomůže ani .htaccess. Je tedy potřeba zamezit možnost do toho parametru v URL vložit tečky a lomítka (nebo to prostě nějak ošetřit, aby nešlo vložit nic mimo tu složku sub).

 
Nahoru Odpovědět  +1 12. července 16:45
Avatar
sunspinx
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
sunspinx:

Sorry za palec dole (preklik) ...

Ta stranka a jej struktura je urobena tak, ze aj keby sa nieco take stalo, tak sa nic nestane, ale kazdopadne osetrim to nejako pre buducnost

Editováno 12. července 19:13
 
Nahoru Odpovědět 12. července 19:12
Avatar
Odpovídá na sunspinx
Martin Konečný (pavelco1998):

Nespoléhej se na něco, co se může kdykoliv změnit :D pak se na to zapomene a je problém. Obecně je lepší vůbec nenechat možnost zajít do jiných adresářů

 
Nahoru Odpovědět 12. července 20:13
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.