« 1 2
Autor Zpráva
Měsíček
Profil
Já to viděl ještě před [editem] bylo to pěkné řešení, mohl jsi ho tam nechat.
bohyn
Profil
Měsíček
Pak sem si rek ze by nektery moderaror mohl prispevek smazat, ale text mam schovany. Takze jestli to nekdo odsouhlasi tak muzu poslat znovu. Nicmene reseni uz jsem napsal a to by snad melo byt dostacujici. Opakovani matka moudrosti - pred includem osetrete promenou:
$stranka = addslashes($_GET['stranka']);
include $stranka.".php";
Gnd
Profil *
Ten kod je nevykonal u tebe na serveru (tam kde byl obrazek nahran), ale na serveru kam si ho includoval.

nahral jsem pres deravy upload jpg s kodem pro vytvoreni souboru a jeho ulozeni s nejakym obsahem. Includoval jsem jpg ze sveho localhostu. Kod se vykonal jak pises asi u me na localhost, ale soubor se vytvoril na serveru, kde bylo ono jpg s uvedenym kodem. Testoval jsem to a opravdu se stalo, jak popisuji, proto nechapu, proc se soubor vytvoril na strane jpg a ne na strane includovani.
Sicario
Profil *
bohyn
$stranka = addslashes($_GET['stranka']);
include $stranka.".php";


Tohle IMHO nic neresi. Krom toho addslashes se na vetsine hostingu deje automaticky.

Lepsi reseni je kontrolovat obsah $stranka na vyskyt nezadoucich retezcu a pripojit k tomu nejaky prefix. Treba absolutni cestu, './' nebo 'prefixskriptu_'.

Jestli se posila co se ma vlozit i ve tvaru ?stranka=adresar/skript, je dobre cely retezec rozlozit (explode). Pak otestovat jestli se adresar naleza v mnozine adresaru, ze kterych chceme includovat. Atd...

Neni to nijak zdlouhava prace a muze ji vyresit jedna kratoucka funkce, trida, nebo neco takoveho:-)
imploder
Profil
bohyn
Já jsem vymyslel
include "./".$_GET["stranka"].".php";

To by mělo zabránit jak urlincludu, tak hrabání se v nějakých nadřazených adresářích. Je to odolné i proti té tvé tajné metodě?
bohyn
Profil
imploder
Je to odolné i proti té tvé tajné metodě
Ano. "./" v podstate nic neresi. Toto funguje "./"."../soubor.php"

Sicario
Treba absolutni cestu, './' nebo 'prefixskriptu_'
"./" jak sem psal vyse, a neni to absolutni cesta.
"prefix_" by zabral pokud ho utocnik neodhali, pak muze nahrat "prefix_trojan.jpg"

Krom toho addslashes se na vetsine hostingu deje automaticky.
magic_quotes_gpc je reseni pro dummies, kdo zvladne zakladni bezpecnost tak tomu tato direktiva spis prekazi. Nicmene problem to resi

Neni to nijak zdlouhava prace a muze ji vyresit jedna kratoucka funkce, trida, nebo neco takoveho:-)
Kontrolovat vyskyt retezcu a z jakeho adresare se includuje lze, ale vetsina programatoru pouzije suffix ".php" a je "za vodou".

Gnd
Muzes mi to jpg poslat na mail v profilu? To ze se soubor ulozil na vzdalenem serveru je docela zajimave.
Sicario
Profil *
bohyn
Tak jo, uznavam addslashes skutecne resi jeden pripad, kdy je mozne obejit include $stranka.".php";, ktery je osetreni resen jen sufixem. Musel jsem si to otestovat a je to pro me novinka. Znak x0 je pekna mrcha.

Tak jsem se zas neco priucil:-)
imploder
Profil
No jo...
Tak tohle je už snad opravdu neprůstřelné:
if(ereg("^[a-zA-Z0-9]*$", $_GET["stranka"])) include "./".$_GET["stranka"].".php";
else { header("Status: 403 tahni do ****"); exit(); }
krteczek
Profil
pánové stále tady řešíte dva oddělené problémy.
1. musíte vyřešit jak includovat soubory. Stále tady řešíte jak udělat BLACK list ale niko z vás nenapadlo jít na to opačně, to znamená mít WHITE list a proti němu kontrolovat include souborů. Přitom je to jednodužší naž vymýšlet pravidla co ještě zakázat....
<?php
$whiteList = array(
    'prace' => 'prace',
    'gallery' => 'gallerie',
//atak dále
);

if(!empty($_GET['page'])) {
    if(array_key_exists($_GET['page'], $whiteList)) {
        include($whiteList[$_GET['page']] . '.php');
    } else {
        //stránka neexistuje takže něco s 404 ;)
    }
} else {
    //protože v adrese není nic tak zavoláme úvodní stránku
    include('uvod.php');
}


Je tento způsob nějak nebezpečný pro váš web? Je jen možná trochu pracnější teď při přepisování ;)

Tímto vlastně máme vyřešen i druhý problém, protože nikdo include nahraného IMG souboru nesvede ;)

Pokud se mýlím, rád si přečtu argumenty proti ;)
pirat89
Profil *
sice je již diskuze mrtvá, ale pro případné zájmece, kteří chtějí zabezpečit upload souborů bude od verze php 5.3.0 k použití nová funkce finfo_file , která bude kontrolovat mime souboru na základě obsahu a ne informací od klienta. Původně k tomu sloužila mám dojem funkce mime_content_type . S tou byly ovšem neustálé problémy (ani ja jsem ji nerozchodil, naustala se dozadovala inicializace pricemz soubor byl v pořádku podle všeho) a je proto dnes na listině zapovězených funkcí. Většinou se její funkce zafixovala pomocí knihovny finfo_file.dll ale ta je dnes v rekonstrukci právě pro verzi 5.3.0.
« 1 2

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0