Názory ke článku Bezpečnost v PHP - úvodní díl – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Názory ke článku Bezpečnost v PHP - úvodní díl – Programujte.comNázory ke článku Bezpečnost v PHP - úvodní díl – Programujte.com

 

Názory ke článku Bezpečnost v PHP - úvodní díl

Baz   NOVÝ
5. 4. 2008

Bylo by vhodne doplnit, ze injekce funguje pouze, pokud je v PHP4 povoleno nacitani vzdalenych souboru (allow_url_fopen ON).

Navic v PHP5 je tato direktiva jeste rozsirena na allow_url_fopen (cteni dat pres http) a allow_url_include (includovani souboru pres http) pricemz allow_url_fopen je defaultne zapnuto a allow_url_include vypnuto.

Ełven   NOVÝ
5. 4. 2008

muze to vypadat jako buzerace, ale najit v odbornem clanku slovo "zabívat" je celkem ulet, jeste jsem tam videl "veze" misto verze...ctete to po sobe, vim, ze je to otrava, ale dokaze to otravit, jinak celkem fajn clanek, php je casto cilem absolutnich amaterskych bastlicu - kopiruji co najdou, hlavne, ze to funguje, snad se Vam je podarit navest na spravnou cestu :)

Anonymní uživatel   NOVÝ
5. 4. 2008

Reagoval na komentář od uživatele Ełven :

Nicméně jsem rád, že znovu tento seriál někdo otevřel (bylo jich již samozřejmě víc v historii na jiných webech), protože tyhle věci je asi dobrý čas od času připomínat i profíkům. Natož těm, co začínají.

Phoenix   NOVÝ
5. 4. 2008

musím říct že to použití swebu mě upřímně rozesmálo. Samozřejmě existuje mnohem elegantnější řešení..
stačí do includovaného souboru dát

<?php
echo "show_source("index.php");";
?>


edit: a sakra,nějak tu blbne escapování, tak si prostě u každýho lomítka jedno odmyslete :smile1:

edit2: divný, když sem to editoval tak je to v pohodě...asi jen nějaká malá chybka

edit3:hmm tak nic...ten druhej edit zase odstranil i zpětný lomítka co tam bejt maj :smile10:

tommmyy   NOVÝ
5. 4. 2008

Nilkdy bych adresou nepradaval stranklu, kterou bych pak vlozil do stranky.vzdycky je moznost jak toho zneuzit.

RobinHood   NOVÝ
7. 4. 2008

Samozřejmě. Musím přiznat že jsem o této možnosti útoku nevěděl, ale to bylo asi proto, že by mne ani ve snu nenapadlo inkludovat skript podobným způsobem ... To si přímo říká o problémy ...

mark   NOVÝ
8. 4. 2008

Injections nejsou chybou v PHP.. chyba by to byla, kdyby neposkytovalo nástroje, jak to ošetřit.. to je starost programátora, aby ošetřil bezpečnost, je to stejné jako kdybys napsal, že je chyba databází, když nekontrolují vstupy. PHP není dokonalé, ale za tohle opravdu nemůže :)

survik1   NOVÝ
8. 4. 2008

Reagoval na komentář od uživatele mark : Nebylo to takto myšleno. Mluvím JEN o chybách, které dělají vývojáři

Lolánek   NOVÝ
8. 4. 2008

Zdravím ve spolek. Pokud probíráte problematiku injection, proč nenapíšete rovnou o sql injection, který je dle mě mnohem častěji zneužívaný.

survik1   NOVÝ
9. 4. 2008

Reagoval na komentář od uživatele Lolánek :
Pokud by si někdo přečetl článek až do konce pochopil by. A proč rovnou nenapsat o všech injekcích? Vydáme knihu v podobě článku...

zdeno   NOVÝ
11. 4. 2008

no ja nevim :) nestacilo by kontrolovat ci nejde o url s http? a zakazat ju? a netreba pak šaškovat s if, switch.. a taktiez nie kazdy ma databazu. ale zaujimy clanek, dik

survik1   NOVÝ
11. 4. 2008

Reagoval na komentář od uživatele zdeno :
Viz krátký odstavec s file_exists()

bimbo   NOVÝ
13. 4. 2008

Nemelo by byt CSRF? :)

P3t4   NOVÝ
17. 4. 2008

porovnávací operátor je == :-) u jednoho si to splet :)) a deklarovat $page = $_GET[page]; mi příjde absolutně zbytečné a taky trochu špatné vnáší to zmatek, superglobální proměnné by měly být jasně vidět :)

Mat   NOVÝ
20. 4. 2008

Dobrý den,
nějak jsem nepochopil co mi může útočník udělat..? Pokud mám v době inkludování souboru zavřené spojení k databázi, tak v ní nic nezmění (navíc to chce mít skript na pouhé připojení k databázi podmíněný hodnotou nějaké "tajné" proměnné). Pokud se jedná o vložení "jiného textu" na stránku - viz. příklad: místo novinek podsunout něco jiného. Tak to bez přístupu na adresářovou strukturu serveru globálně neudělá - maximálně si to může zobrazit pro sebe změnou url ( &page=http://neco.ltd/violent_script ).
Nebo mi něco uniká? Díky za vysvětlení.

survik1   NOVÝ
21. 4. 2008

Reagoval na komentář od uživatele Mat :
Jednoduchou ukázkou zákeřného kódu může být toto:



<?
$file = "index.php";
$fp = fopen($file, 'w');
fwrite($fp, "Stranka nabourana");
?>


Tento kód způsobí přepsání index.php. Možností je mnoho. K té databázi. Stačí si zobrazit kód index.php, zjistit si umístění připojovacího souboru. Ten pak includovat do zákeřného kódu a můžeme "pracovat".

survik1   NOVÝ
21. 4. 2008

Reagoval na komentář od uživatele P3t4 :
Děkuji, opraveno.
Co se týče superglobálních proměnných, je to věcí názoru. Já to řeším takhle, jelikož šetřím místem.
Reagoval na komentář od uživatele bimbo :
Děkuji, opraveno.

Emkei   NOVÝ
22. 4. 2008

Uložením souboru na jiném webu, který leží na stejném serveru (možné pouze u neprofesionálních hostingů) ... se v dnešní době prakticky nevyskytuje.



:smile17: v tomto by s tebou asi vetsina utocniku nesouhlasila, naopak na toto trpi snad 80 % sdilenych hostingovych serveru, at uz placenych nebo free, funkce file_exists() by se tedy k podobne kontrole nemela pouzivat nikdy.
jinak hezky clanek, tesim se na pokracovani... :smile2:

Anonymní uživatel   NOVÝ
22. 4. 2008

jeste bych dodal jednu moznost, jak danou situaci resit, a to aniz bychom museli neustale pri rozsirovani systemu myslet na doplnovani poli nebo databaze:

<?php

$page = $_GET['page'];

if (empty($page) || $page=="index" || substr_count($page, './') || substr_count($page, '://'))
$page = "main";

include "./".$page.".php";
?>


nejprve se zkontroluje promenna $page na vyskyt znaku pro kanonizaci, cimz se zamezi LFI (Local File Inclusion) a retezec "./" vlozeny pred samotnym nazvem includovaneho souboru zamezi RFI (Remote File Inclusion), stejne jako posledni pravidlo pri pocatecnim overeni obsahu promenne $page. pravidlo $page=="index" zamezi zacykleni scriptu.
takto lze system bezpecne rozsirovat o dalsi stranky, aniz by se muselo cokoliv nekde upravovat.

Emkei   NOVÝ
22. 4. 2008

Reagoval na komentář od uživatele Anonymní uživatel :

hopla, ono se to odeslalo i bez podpisu :smile14:

survik1   NOVÝ
23. 4. 2008

Reagoval na komentář od uživatele Anonymní uživatel :
Ano, ale opět je zde problém v umístění všech souborů v jedné složce s daným názvem. To je podle mě značná nevýhoda. A opět stejný problém jako u file_exists, pokud je zde neošetřený download, opět hrozí problémy.

Emkei   NOVÝ
23. 4. 2008

Reagoval na komentář od uživatele Tomáš Neumaier :
ne, promenna $page preci muze nabyt hodnoty vcetne cesty, tedy napr.
index.php?page=articles/show
neomezujes se tak ani na jednu slozku ani na fakt, ze kazdy script v projektu musi mit nutne unikatni jmeno.
neosetreny download je zas jina chyba...

survik1   NOVÝ
24. 4. 2008

Reagoval na komentář od uživatele Emkei :
Ano, ale ve většině případů je jedna chyba na chybě. Dobře, tak pak je tu min. omezení znepřístupnění dolních sekcí. Nemusí sice mít unikátní jméno, na druhou stranu pokud je register_globals = on, pak to akorát nahrává na problémy. A já se pokouším izolovat všechny možné problémy, aby každý, kdo script použije už nemusel nadále hledat a zpracovávat. Individuálně dobrý způsob...

Emkei   NOVÝ
24. 4. 2008

Reagoval na komentář od uživatele Tomáš Neumaier :
pokud si autor toho CMS neosetri download, pak utocnikovi ani jeden z vyse uvedenych zpusobu dynamickeho includovani scriptu v utoku nezabrani.
jestli temi dolnimi sekcemi myslis nadrazene adresare rootu, ve kterem se nachazi index.php, pak je to omezeni naopak vyhodou, tam by ses totiz pres vyse zminovane funkce nikdy dostat nemel, protoze to logicky neni pri legitimnim pouzivani toho systemu potreba.
ten script funguje bezproblemove jak pri zapnute, tak pri vypnute direktive register_globals a nelze jej ani pri register_globals = on zneuzit.
ps: chci jen pomoct, doufam, ze to neberes jako kritiku :smile1:

survik1   NOVÝ
24. 4. 2008

Reagoval na komentář od uživatele Emkei :
No, teď už přestávám chápat tvé komentáře, ale ti co to budou číst snad pochopí a využijí. Neboj, beru to v pohodě ;)

pooky   NOVÝ
6. 5. 2008

Ahoj, můžetemi prosím poradit, co znamená "neošetřený download"? S php začínám a způsob řešení od Emkei se mi líbí, jenom nevím, jaké že narušení mi tedy hrozí tím neošetřeným downloadem. Zkusil jsem na toto téma hledat i jinde, ale marně. Kdybyste apoň měli tip, kde se dozvědět víc, budu moc vděčnej.

Předem moc děkuju za odpověď.

Emkei   NOVÝ
7. 5. 2008

Reagoval na komentář od uživatele pooky : pod oznacenim "neosetreny download" je skryt benevolentne napsany script, ktery dovoluje komukoliv stahnout vedle regulernich souboru v downloadu i jine soubory, ktere jiz do downloadu rozhodne nepatri, napriklad samotne scripty v jinych adresarich, cimz lze nejen ze ziskat zdrojove kody, ale i napr. heslo k databazi. osetreni neni obtizne, dokonce si muzes vybrat hned z nekolika moznosti.

ps: pokud chces pouzit mnou navrhovane reseni includovani souboru, tak jsem ten kod neosetril proti tzv. "NULL Byte", prvni radek toho kodu by mel tedy vypadat nasledovne:

$page = addslashes($_GET['page']);

Harvie   NOVÝ
10. 5. 2008

Musim konstatovat, ze matete zacatecniky a vas kod neni casto o nic bezpecnejsi nez ten ktery ukazujete jako spatny. Nejdriv si udelejte na vec uceleny pohled. Zacatecnikum mohu jen doporucit knihu "Nebezpecny kod" a verim, ze kdo si ji jen prolistuje, pozna ze tento clanek neni ta spravna cesta. Sorry.

survik1   NOVÝ
14. 5. 2008

Reagoval na komentář od uživatele Harvie :
Dobrý den. Žádal bych, aby jste napsal, co je špatně a váš způsob obcházení těchto kódů. Opravdu by mě to zajímalo.

James   NOVÝ
20. 6. 2008

O této "chybě" jsem něco věděl, ale něco jsem se přiučil, ale byl bych rad kdyby mel tenhle serial taky pokracovani, je nekolik tydnů možná měsíců pryč a pokračování ještě nevyšlo, tak sem se chtěl zeptat jestli vůbec vyjde?

survik1   NOVÝ
29. 6. 2008

Reagoval na komentář od uživatele James :
Omlouvám se, vzhledem k nedostatku času jsem nepracoval. Teď přes prázdniny bude čas, takže určitě pokračování bude.

miki   NOVÝ
7. 7. 2008

jaký je rozdíl mezi používání uvozovek a apostrofů ? výsledek je stejný ale narazil jsem např na

Neobsahuje-li parametr funkce include() žádnou proměnnou, uzavírejte jej do apostrofů namísto uvozovek.

to určitě není jediný koment co jsem kdy viděl že někdo říká že je lepší to nebo on

xtendor   NOVÝ
7. 7. 2008

chci se zeptat jestli je tento kód bezpečný ?

<?php
$obsah =$id.".inc";
if (File_Exists ($obsah)):
include $obsah;
else:
include "uvod.inc";
endif;
?>

xtendor   NOVÝ
7. 7. 2008

ahoj , chci se zeptat jestli je tento kód bezpečný ?


<?php
$obsah =$id.".inc";
if (File_Exists ($obsah)):
include $obsah;
else:
include "uvod.inc";
endif;
?>

Emkei   NOVÝ
7. 7. 2008

Reagoval na komentář od uživatele xtendor :
cau, neni bezpecny. pojmenovavat includovane soubory cosi.inc je hola sebevrazda, kdyz uz je chces odlisit od ostatnich scriptu, pojmenuj je alespon cosi.inc.php.
uvedeny script je odolny pouze proti RFI, oproti LFI je nachylny...

James   NOVÝ
17. 7. 2008

Reagoval na komentář od uživatele Harvie :
Ja bych si docela rad precetl tu knihu "nebezpecny kod" jenže mam problem hledal sem ji vsude mozne i v knihovne ale nikde sem ji nenasel tak jestli byste mi nekdo nenapsal aspon autora.

aa007   NOVÝ
20. 7. 2008

Reagoval na komentář od uživatele James :
nemyslis nahodou knihu zranitelny kod? http://www.soom.cz/index.php?name=recenze/show&aid=271
ta uz se sehnat v pohode da ;)

zacatecnik   NOVÝ
28. 8. 2008

pro zacatecnika je toho az az :smile6:

Jakub Lucký   NOVÝ
14. 9. 2008

V některých případech bude určitě rozumnější použít require než pouhý include (např ta 404ka)

Patrik "Ceres" Lisík :)   NOVÝ
13. 11. 2008

Mám dotaz, trošku jsem upravil ten jeden z kodů, co jsi tam dal ... Je to ten, kterž následoval po tom, jak jsme si ho měli horlivě přečíst a pak na něj zapomenout.

<?   

if (IsSet($_GET[''])) {
$page = $_GET[''];
switch($page) {
case 'uvod':
include "main.php";
if ($Get 's' == 's')
case 'download':
include "download.php";
endif;
//...
default:
include "errors/404.php";
endif;
}
}
?>


Taže jak? Jde mi to, zda mi to vypíše skutečně co by mělo.

Cereal   NOVÝ
26. 12. 2008

Ja osobne si definuji pole, ve kterem jsou jmena konkretnich souboru ulozena. Takze i kdyz predam promenne hodnotu "uvod", naincluduje se treba "news.php" a tak podobne... pridat si do pole pri rozsirovani stranky jeden radek me nijak neobtezuje.

Styopi   NOVÝ
9. 7. 2009

if (isset($_GET['page']))

{
$co = array("/", "http://", "www");
$naco = array("_", "_", "_");
$page = str_replace($co, $naco, $page);

$page=$_GET['page'];
}
else
{
$page="home";
}

if (is_file("page/".$page.".php"))
{
include("page/".$page.".php");
}
else
{
include("page/error_page.php");
}

Styopi   NOVÝ
9. 7. 2009



if (isset($_GET['page']))
{
$page=$_GET['page'];

$co = array("/", "http://", "www");
$naco = array("_", "_", "_");
$page = str_replace($co, $naco, $page);
}
else
{
$page="home";
}

if (is_file("page/".$page.".php"))
{
include("page/".$page.".php");
}
else
{
include("page/error_page.php");
}

survik1   NOVÝ
25. 10. 2009

Reagoval na komentář od uživatele Patrik "Ceres" Lisík :) : Teoreticky ano, ale je tam ještě dost chyb, které by to chtělo opravit. Nicméně - proč tak složitě?

survik1   NOVÝ
25. 10. 2009

Reagoval na komentář od uživatele Styopi :
No a jsme zpět u možnosti uploadu. Nikdo mi nezabrání předávat ../../ a podobné kódy, abych se dostal tam, kam potřebuji.

develo   NOVÝ
3. 11. 2009

Lidi, nejlíp se to naučíte když vyzkoušíte všechny chybky co najdete na netu a pak když už si myslíte že tam nic není tak se třeba ptejte a pište zda to je bezpečný ale když tu ty injekce nejsou na stránce tak to tu ani vědět nebudou ;-)
bez připomínek - thx (to bolo moja logicke rozpolozeni ktere me napadlo pri tom cteni ;-)) :-D)

develo   NOVÝ
3. 11. 2009

chtěl jsem se zeptat, když je url_fopen zakázáno, šlo by to nějak obejít při:
koder ma web subdomena.neco.cz a utocnik ma subdomena2.neco.cz
šlo by to nějak obejit? pokud tedy tam jsou ty chybky.. (přeci ;-))
thx za všechno!

ap   NOVÝ
30. 12. 2009

Je zle, resp. privelmi amaterske ak mam grafiku stranky v jednom subore, ktory potom icludujem do vsetkych ostatnych? pomocou statickeho include? diky.

Sh0ck3r   NOVÝ
15. 1. 2010

Reagoval na komentář od uživatele James :
A nejmenuje se ta kniha náhodou "Zranitelný Kód" od Sverre H.Huseby ? :-) Vřele doporučuju :-)

Přidej svůj názor

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo e-mailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Reaguješ na příspěvek:
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové názory e-mailem (pouze pro přihlášené)
Sleduj názory ke článku a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.



Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý