Autor | Zpráva | ||
---|---|---|---|
JimmyHD Profil * |
#1 · Zasláno: 28. 1. 2009, 15:44:50
Ahoj,
vsude ctu jak je include nebezpence kvuli napadeni stranek. Tak bych se chtel zeptat 1.) jestli je nebezpecne i v pripade ze budu na strankach mit jednoduche (pevne) include ve stylu <?php iclude(soubor.inc); > tzn. zadne promenne - include($soubor); 2.) je nebezpecne i pri includovani timto zpusobem? if $includuj = stranka1 include stranka1.inc elseif $includuj = stranka2 include stranka2.inc elseif $includuj = stranka3 include stranka3.inc else include 404.inc (taky zadne promenne v include) (pisu v rychlosti tak se nesmejte jak je to napsane diky :) ) Diky za odpovedi. |
||
AM_ Profil |
#2 · Zasláno: 28. 1. 2009, 16:02:12
kdyz si to trochu osetris, staci: $soubor = preg_replace('/[^a-z0-9]/i', '', $soubor); include "inc/$soubor.php"; tak je to bezpecne i s promennou. Bez tohohle osetreni by ti nekdo do include mohl propasovat svuj skript (napr. by tam zadal http://hackeruv-web.cz/hack.php), razem na tvem webu bezi cizi skript, muze ti cist, menit a mazat soubory atd) nebo i dalsi problemy.
|
||
JimmyHD Profil * |
#3 · Zasláno: 28. 1. 2009, 19:00:42
k cemu potrebuji toto osetrenikdyz ve skriptu budu mit include "vzdyurcitysoubor.inc" a ne promennou (include $soubor) ??
A muzu te poprosit o vysvetleni (jak pro *******) co presne provadi tenhle zapis? $soubor = preg_replace('/[^a-z0-9]/i', '', $soubor); Dekuji |
||
JimmyHD Profil * |
#4 · Zasláno: 28. 1. 2009, 19:02:04
proc se to deb*l vyhvezdickovalo? to jsem nadaval sam sobe :-D
|
||
JimmyHD Profil * |
#5 · Zasláno: 28. 1. 2009, 19:18:21
A co rikate na tahle reseni:
<?php include $_SERVER['DOCUMENT_ROOT']."/lib/sample.lib.php"; ?> ???? Tohle je bezpecne? To se mi hodne zamouva :) Jinak jsem narazil jeste na tohle: include($folder.DIRECTORY_SEPARATOR.$file;) |
||
AM_ Profil |
#6 · Zasláno: 28. 1. 2009, 19:19:38
ten zapis odstrani vsechny nealfanumericke (ne-cisla-a-pismenka) znaky z promenne $soubor, cimz zamezis vkladani nezadoucich souboru.
if $includuj = stranka1 include stranka1.inc elseif $includuj = stranka2 include stranka2.inc elseif $includuj = stranka3 include stranka3.inc je hroznost, pouzij radeji tu promennou. Kdybys to uz mermomoci chtel udelat takhle, tak skutecne ochranu nepotrebujes, ale je to reseni jak za krale klacka. |
||
Tomasds Profil |
#7 · Zasláno: 28. 1. 2009, 19:28:57 · Upravil/a: Tomasds
Nemůžu si pomoct, ale když tady zase čtu debatu o includu a zase tady lítají reguláry, elseify a bezpečnost, dovolím si připomenout své řešení, které mi pořád připadá jaksi nejpřehlednější a nejbezpečnější.
$inc="404.inc"; if ($includuj == "neco") {$inc="nejakastranka.inc";}; if ($includuj == "neco2") {$inc="nejakastranka2.inc";}; if ($includuj == "neco3") {$inc="nejakastranka3.inc";}; if ($includuj == "neco4") {$inc="nejakastranka4.inc";}; include $inc; |
||
JimmyHD Profil * |
#8 · Zasláno: 28. 1. 2009, 19:46:21
Myslis ze tohle je pouzitelne a dobre zabezpecene proti utoku?
// vezmu poslanou promennou get promenna // pokud neni poslana promenna nastavim hlavni stranku if(!isset($promenna)) $promenna = "hlavnistranka"; endif // odstranim nepovolene znaky z promenne $promenna = preg_replace('/[^a-z0-9]/i', '', $promenna); // pred promennou vlozim slozka/ a pridam tecku a priponu a ulozim to do promenne soubor $soubor = "slozka/"."$promenna".".pripona"; // pokud existuje soubor includuj ho if (file_exists($soubor)) { include $soubor; // pokud ne includuj soubor 404.inc ze slozky errors } else { include "errors/404.inc"; } |
||
tiso Profil |
#9 · Zasláno: 28. 1. 2009, 19:48:30
Tomasds - spoliehaš sa na nastavenie servera (že príponu inc bude interpretovať ako PHP), a keď už, tak lepšie je riešenie s in_array ako if if if...
|
||
Tomasds Profil |
#10 · Zasláno: 28. 1. 2009, 19:57:16
tiso
Abych se přiznal, na inc nespoléhám, includuju soubory php, tady jsem napsal inc jen proto, abych se přiblížil tomu, jak to bylo napsáno nade mnou. in_array nedosahuje přehlednosti if if if :) |
||
tiso Profil |
#11 · Zasláno: 28. 1. 2009, 20:07:34
Tomasds „in_array nedosahuje přehlednosti if if if :)“
A to máš odkiaľ? Nikdy si nevidel viacriadkový zápis poľa? |
||
AM_ Profil |
#12 · Zasláno: 28. 1. 2009, 20:49:46
Tomasds
Hodně štěstí při psaní stránky, která bude mít padesát sekcí. Nebo třeba dvě stě. A když po tobě ten kód přebere jiný programátor, s největší pravděpodobností tě zastřelí. Ukaž mi způsob, jak prostřelit preg_replace('/[^a-z0-9]/i', '', $promenna). JimmyHD Přesně jak jsi to napsal, neznám způsob, jak takovou ochranu prostřelit (ono to ani není ochrana, jen čistě napsaný kód, ve kterém není žádná bezpečnostní chyba). Leda snad že by byla chyba v samotném PHP |
||
Tomasds Profil |
#13 · Zasláno: 28. 1. 2009, 20:49:53
tiso
ok, stačilo. Nemám potřebu se dohadovat o nesmyslech, svou verzi použití include jsem napsal. |
||
Tomasds Profil |
#14 · Zasláno: 28. 1. 2009, 20:55:03
AM_
Programátor jsem já. Padesát podstránek by bylo docela dost, ale neviděl bych to jako problém. 200 stránek.. takový web neznám. |
||
JimmyHD Profil * |
#15 · Zasláno: 28. 1. 2009, 21:21:30
tak jsem udelal 2 varianty, muzete mi prosim okomentovat jejich chyby nebo ktera je/neni bezpecnejsi a proc?
predem diky! 1) <?php if (!isset($_GET['gohere'])) { $gohere = "hlavni-stranka"; } else { $gohere = preg_replace('/[^a-z0-9]/i', '', $gohere); } if (file_exists("./".$gohere.".php")) { include ("./".$gohere.".php"); } else { include "./error-404.php"; } ?> 2) <?php if (!isset($_GET['gohere'])) { $gohere = "hlavni-stranka"; } else { $gohere = preg_replace('/[^a-z0-9]/i', '', $gohere); } if (file_exists($_SERVER['DOCUMENT_ROOT'].$gohere.".php")) { include ($_SERVER['DOCUMENT_ROOT'].$gohere.".php"); } else { include $_SERVER['DOCUMENT_ROOT']."error-404.php"; } ?> |
||
AM_ Profil |
#16 · Zasláno: 28. 1. 2009, 21:32:24
bezpečnější je třetí:
<?php if (!isset($_GET['gohere'])) { $gohere = "hlavni-stranka"; } else { $gohere = preg_replace('/[^a-z0-9]/i', '', $gohere); } if (file_exists("docs/".$gohere.".php")) { include ("docs/".$gohere.".php"); } else { include "docs/error-404.php"; } ?> dokumenty je dobré ukládat do nějaké podsložky, ne na stejnou úroveň, jako máš index: - do této složky dáš .htaccess s direktivou "deny from all", aby soubory nikdo nemohl zobrazit samostatně, ale jen skrz index - jinak by někdo mohl vytěžovat server tím, že zavolá index.php?gohere=index, který by se pak pořád vkládal sám do sebe Jinak ve variantě 2 používáš nesmyslně DOCUMENT_ROOT. Když si web pustíš na localhostu třeba ve složce /mujprvniweb, documentroot bude o úroveň výš, než chceš. jinak "./" není potřeba na začátku cesty uvádět. |
||
JimmyHD Profil * |
#17 · Zasláno: 28. 1. 2009, 21:35:45
AM_
supr, diky! Jen uz bokem maly dotaz proc nemusim uvadet "./" (nekde jsem videl ze to je pry ochrana... A jeste, odstrani mi preg_replace i "-" a "_" ? pouzivam je mezi slovy napr. hlavni_stranka |
||
JimmyHD Profil * |
#18 · Zasláno: 28. 1. 2009, 21:40:49
btw mozna nebudu includovat obsah, proto zustavam v rootu a nejdu do slozky kde je zakazany pristup. budu mit stranky jednotlive. includovat se bude treba jen menu atd (co bude na vice strankach spolecne) ... kvuli SEO aby mi vyhledavace pak indexovaly odkazy napr:
www.mojedomena.cz/prvni_stranka.html www.mojedomena.cz/dalsi_stranka.html www.mojedomena.cz/uplne_jina_stranka.html |
||
JimmyHD Profil * |
#19 · Zasláno: 28. 1. 2009, 21:47:19
kazdy html soubor se bude mimo obsahu (napevno) skladat z includu (header,menu,footer....) ... tak to mam v umyslu
|
||
AM_ Profil |
#20 · Zasláno: 28. 1. 2009, 21:47:23
vetsinou se to resi tak ze vsechny veci jako /prvni_stranka.html se prepisuji na index.php?text=prvni_stranka pomoci .htaccess pokud to chces mit seo... a spis nez ze mas tisic souboru ktere vkladaji jedno menu se to dela tak ze mas index ktery je pro vsechny stranky jednotny (tzv. master page) a do nejake jeho casti se includuje obsah aktualni sekce.
do preg_replace si muzes pridat _ a - takle: [^a-z0-9_\\-] a porad to bude dost bezpecne. ./ muze byt ochrana proti tomu, aby ti nekdo na zacatek adresy souboru nehodil protokol (http://) a tim inkludoval naky svuj skript ze sveho webu, ale tuhle moznost preg_replace vylucuje, protoze znaky : a / vyhazi, takze ten hack nebude fungovat. |
||
AM_ Profil |
#21 · Zasláno: 28. 1. 2009, 21:48:55
Pokud to chces delat tak, jak rikas, tak tam ty include davej napevno :) to pak nema smysl je tlacit pres promennou, na include('obsah.php') se stejne nic nezmeni zejo... ale takhle se to nedela, az se jednou rozhodnes, ze chces pridat do vsech stranek pravy sloupec, s mym resenim ho pridas jen do indexu, s tim tvym budes muset opravovat vsechny soubory
|
||
JimmyHD Profil * |
#22 · Zasláno: 28. 1. 2009, 21:50:22
ad tisic souboru: neni to jedno, mit tisic inc souboru a jeden index, nebo tisic html a par inc ? :) ja tomu prepisu adres pres htaccess moc neverim :)
ad ostatni: diky! |
||
AM_ Profil |
#23 · Zasláno: 28. 1. 2009, 22:49:27
Neni to jedno :) jak sem vysvetloval, rozhodnes se zmenit neco v celkovym vzhledu (treba pridat ten pravej sloupec) a ses v pytli. Profici to delaji tak jak pisu, ma to i dalsi opodstatneni... htaccessu a mod_rewrite muzes plne verit, kazdy dobry hosting ho podporuje. Nekdy akorat stoji trochu usili dobre ty pravidla pro rewrite napsat, aby ti to apache spolknul, ale ne zas tolik prace aby to nestalo za vysledek. Jasne, pokud delas nakou malou osobni stranku, je prakticky jedno, co a jak udelas, hlavni je, ze to nak funguje. Ale kdyz to s programovanim a webarinou myslis vazne, je lepsi se to rovnou ucit dobre ;)
|
||
JimmyHD Profil * |
#24 · Zasláno: 29. 1. 2009, 11:23:02
AM_
ja v tom mem reseni prave vydim hlavne vyhodu ze kdyz si pak budu editovat obsah tak otevru danou stranku v DW a uvidim rovnou jak se mi vsechno zformatuje (CSS).. lze u tveho reseni webmasteru :) nejak editovat obsah (includy) tak abych rovnou videl jak to bude vypadat v prohlizeci? |
||
JimmyHD Profil * |
#25 · Zasláno: 29. 1. 2009, 11:38:33
jde i o to ze mam fakt par stranek, do budoucna max nekolik desitek, ale jde o to ze se budou lisit i usporadanim a nektere budou vypadat uplne jinak :-P
|
||
AM_ Profil |
#26 · Zasláno: 29. 1. 2009, 16:32:28
no neni tak slozity zeditovat obsah, ulozit a otevrit (nebo refreshnout) to v prohlizeci :)
|
||
JimmyHD Profil * |
#27 · Zasláno: 30. 1. 2009, 00:00:55
a je to moje reseni vylozene spatne? nebo neprofesionalni? ..
.. je to muj styl O:-) |
||
nightfish Profil |
#28 · Zasláno: 30. 1. 2009, 09:14:22
„if (file_exists("docs/".$gohere.".php")) {“
v tomto případě se bude soubor hledat v celé include_path, což je zoufale hloupé, když chceš projít jenom ./docs/... „jinak "./" není potřeba na začátku cesty uvádět.“ a tak bych rád doporučil uživateli AM_, aby se nevyjadřoval o věcech, kterým nerozumí |
||
AM_ Profil |
#29 · Zasláno: 30. 1. 2009, 10:17:17
nightfish
aha, teď jsem díky tobě zjistil, že vlastně všechno co sem kdy napsal nefunguje, že mi na začátku všech cest chybí ./ ... předtím to pořád vypadalo že to funguje :-D prosímtě co to tu meleš... |
||
AM_ Profil |
#30 · Zasláno: 30. 1. 2009, 10:33:18
co se týče include_path tak pokud s ní pracuješ a máš tam mraky složek tak jo... máš pravdu, souvislost s include_path mi unikla, ale 1) pochybuju, že JimmyHD include_path používá 2) běž si mastit ego na někom jiném, stane se, že i profesionál dá jen 99% radu, možná ty na to máš 3 vysoký ale s tim se vytahuj na někoho jinýho a ne na lidi co se snažej někomu pomoct, hlavněže tys celý ten problém co se tu řešil JimmyHDmu objasnil.
|
||
Časová prodleva: 15 let
|
0