Autor | Zpráva | ||
---|---|---|---|
Rob Profil |
#1 · Zasláno: 16. 11. 2005, 17:11:04
Takže,
pokud vše vyjde, tak budu dělat docela rozsáhlý projekt. Bude to i v rámci školy. No a prostě plánuju se na tom naučit nové věci. Takže asi v téhle souvislosti tady v budoucnu bude hodně dotazů :-). Ale nebudu předbíhat. Takže. Doposud jsem dělal tajné sekce do jednoho souboru přes switch. Tady jsem to zabezpečoval tak, že jsem switch obalil if ($_COOKIE['povoleni_k_pristupu'] == 'povoleno') { a tady byl ten swith no a } else { trhněte si nohou (tohle tam sice není, ale vypadá to líp) no a tady to je jednoduché. Takhle jsem původně dělal i vkládání obsahu. Teď jse se naučil index.php?sekce=neco a script udělá to, že includne stránku neco.php. Určitě to znáte. No a já se ptám: Když bych udělal tu podmínku na cookie a když to povolení bude, tak teprve ten script na vložení stránky podle $_GET['sekce']. Jde mi o to: nevidíte někdo v tomhle nějakou bezpečnostní mezeru oproti načítání ze switche?? No a pokud bych chtěl začít zabezpečovat pomocí session: jak se správně ověřuje povolení. předpokládám, že if $_SESSION['povoleni_dsfsfsdfs'] == 'jasne_ze_jio' se to asi dělat nebude. Takhle to zní docela nepochopitelně, takže ukázky: původně: if ($_COOKIE['povoleni_k_pristupu'] == 'jiste_ze_jo') { switch ($_GET['sekce']) { case: spojit databázi vykonat příkaz echnout výsledek break; case: spojit databázi vykonat příkaz echnout výsledek break; } } else {echo 'trhni si!!!'; } No a teď vkládám příkazem: $page = $_GET['sekce']; $dir = 'adresar/'; $uvodni = 'uvodni.php'; if ($page) { if (file_exists($dir.$page.'.php')) { include ($dir.$page.'.php'); } else { include ($dir.'404.php'); } } else { include ($dir.$uvodni); } no a jde mi o to: když tenhle script na vkládání obalím tím co kontroluje povolení a budu vkládat třeba nejakastranka.php: <? spojit databázi vykonat příkaz echnout výsledek ?> Tak jestli v tom není nějaká bezpečnostní díra. |
||
jogurt Profil |
#2 · Zasláno: 16. 11. 2005, 23:12:21
jestli sem to dobre pochopil (to bylo dost tezky :-), tak prestoze nejsem profesionalni hacker, tak tam vidim dve diry.
1) kdyz si potencialni utocnik nahraje primo stranku nejakastranka.php, tak je tam i bez hesla... --> takze by bylo asi lepsi includovat nejakej script na zabezpeceni do kazde stranky. 2) kdyz pouzijes to "if ($_COOKIE['povoleni_k_pristupu'] == 'jiste_ze_jo') ", tak si muze do cookie sam napsat 'jiste_ze_jo' i bez znalosti hesla... --> to se resi vetsinou tak, ze do cookie ulozis pomoci md5 zasifrovane heslo a pri kazdem nahravani tajne stranky ho testujes. Ale nejlepsi je vubec to nedelat pres cookie, ale pres sessions nebo v databazi. j |
||
Rob Profil |
#3 · Zasláno: 16. 11. 2005, 23:34:42
jogurt
Nojo, to jsem tušil, takže bych asi zůstal u toho jednoho souboru ve switchi a ověřoval to pomocí toho hesla při každé akci. Ale tím pádem jeden dotaz ke spojení s MySQL. Když bych to takhle udělal, jak mám vymyslet spojení, aby nějak příliš nenaskakoval počet těch spojení??? Něco jako před začítkem toho switche spojit databázi a pak????.....kde bych to spojení měl ukončit, abych měl co nejmelší počet přístupů? A stejně nevypadalo by to tak, že při každém volání toho scriptu by se to spojení otevřelo znovu? Tedy při každém kliknutí... Jde o to, že to bude celkem velký, i když asi i docela bezvýznamný projek. A budu se na tom učit některé nové věci. No a prostě to chci pojmout co nejprofesionálněji. A u zabezpečení to asi začíná..... |
||
Rob Profil |
#4 · Zasláno: 16. 11. 2005, 23:41:48
A k tomu vkládání:
Pokud by ty vkládané soubory byly pouze pro práci s databází, tak: Sice můžete tu adresu zadat rovnou, ale když zadáte adresu toho jednoho scriptu, tak vám to nic nevypíše, protože nebude mít co vypisovat. Z něčeho musí získat informaci, co má vyspat. Nebo mi prostě něco uniklo? A nebo ještě lépe: Jak vůbec tyhle problémy řešíte vy? |
||
printf_jinde Profil * |
#5 · Zasláno: 17. 11. 2005, 01:37:49
includování souborů s názvem přejatým z proměnné GET, POST, COOKIE je IMHO jeden z nejhorších způsobů, ale pokud to zabezpečíte, můžete leckoho nachytat a pak se podívat do logu, co vám to chtěl podstrčit (četba logů je ideální pro dlouhé zimní večery...):
s tou proměnnou $_GET['sekce'] bych tedy naložil následovně: zalogovat ji do souboru, otestovat jestli neobsahuje znaky, které nemá obsahovat (třeba lomítko či dvojtečku) a pokud ne, předat ji do proměnné $sekce: $pole = array ('hlavni.php'=>'adresar/inc_hlavni.php','dalsi.php'=>'adresar/inc_dals i.php'); atd.. if (file_exists($pole[$sekce])) { include ($pole[$page]); } else... pole zde funguje jako takový překladatel s kontrolou Do cookie bych uložil maximálně číslo seance nebo něco neškodného, jako počet zobrazených fotek u fotogalerie a podobně. Je to také proměnná od uživatele, která může obsahovat leccos co si vymyslí, takže kontrolovat jako ostatní proměnné od uživatele. Během skriptu se samozřejmě jedno spojení s db otevřít musí. V tom spojení se pak položí minimální počet skromných dotazů, které databázi zbytečně nezatíží a zpracují se výsledky. I přesto těch dotazů někdy musí být několik a databáze se s tím holt musí poprat. No a prostě to chci pojmout co nejprofesionálněji. chválím, jen vytrvat :-) |
||
jozob Profil |
#6 · Zasláno: 17. 11. 2005, 10:09:40 · Upravil/a: jozob
http://interval.cz/clanek.asp?article=2730
http://interval.cz/clanek.asp?article=2405 http://interval.cz/clanek.asp?article=895 http://www.pcsvet.cz/art/article.php?id=1072 http://www.pcsvet.cz/art/article.php?id=5562 http://www.pcsvet.cz/art/article.php?id=2722 http://www.pcsvet.cz/art/article.php?id=3509 |
||
Rob Profil |
#7 · Zasláno: 17. 11. 2005, 10:32:46
printf_jinde
Já jsem na to šel a půjdu takhle: Takže vkládání dělám tak, že (už to vlastně bylo nahoře) $page = $_GET['sekce']; $dir = 'adresar/'; $uvodni = 'uvodni.php'; if ($page) { if (file_exists($dir.$page.'.php')) { include ($dir.$page.'.php'); } else { include ($dir.'404.php'); } } else { include ($dir.$uvodni); } takže pokud budě nějaká špatná adresa, tak to hodí 404. Proměnné do $_GET['sekce'] dávám přes odkazy, takže nevidím samo o sobě nějaký problém. A jak na to půjdu. Konečně jsem přišel na to, kde dělám chybu v sessions, takže už je umím používat. Proto všechno hodím do sessions a když už budu muset otevřít připojení k databázi, tak rovnou ověřím znovu i to heslo v md5(). To už nebude takový problém. A aspoň mi to zvýší bezpečnost i v tom, že prozatím jsem hesla ukládal přes MySQL funkci PASSWORD(). Takže to samo o sobě asi moc bezpečné taky nebylo. A ještě si neodpustím nějaký dotaz: 1) Zdá se vám to co jsem nastínil bezpečnostně použitelné?? 2) a jeden takový docela (ok, velmi) trapný dotaz: Jak vypnout session?? Nemůžu to nějak najít. No a prostě to chci pojmout co nejprofesionálněji. chválím, jen vytrvat :-) Díky. Pokusím se. Do budoucna to stejně asi jinak nepůjde. |
||
Rob Profil |
#8 · Zasláno: 17. 11. 2005, 10:43:38
jozob
Díky! |
||
Rob Profil |
#9 · Zasláno: 17. 11. 2005, 10:47:48
Aha,
session_destroy(); našel jsem to na tom intervalu. |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0