Autor | Zpráva | ||
---|---|---|---|
mosba Profil |
#1 · Zasláno: 27. 1. 2009, 12:40:53
Mužu se spolehnout, že následujícím zůsobem získaná konstanta LOCAL:
$server_name = strip_tags( $_SERVER[ "SERVER_NAME" ] ) define( 'LOCAL', (stristr($server_name, 'local') || (substr($server_name, 0, 7) == '192.168')) ? TRUE : FALSE ); bude true pouze na localhostu? Zjednodušuje mi to práci s konfigurací, protože můžu použít tentýž soubor na lokale i na živém serveru. Existuje možnost, jak může návštěvník živé stránky hodnotu podvrhnout? Díky |
||
AM Profil * |
#2 · Zasláno: 27. 1. 2009, 12:44:08
Zkus porovnávat SERVER_ADDR a REMOTE_ADDR. Nejsem si 100% jist, jestli nemůže nastat výjimka, ale myslím, že spíš ne a že je to nejelegantnější způsob (pokud se rovnají, jedná se o localhost).
|
||
AM Profil * |
#3 · Zasláno: 27. 1. 2009, 12:44:45
jo, jedná se o elementy pole $_SERVER.
|
||
mosba Profil |
#4 · Zasláno: 27. 1. 2009, 12:57:31
Díky.
Chápu jak změnit $_SERVER["HTTP_HOST"] atp. Nerozumím, jak podvrhnout $_SERVER[ "SERVER_ADDR" ]. O tato hodnota pochází od serveru, na kterém skript běží. Jak může návštěvník stránky prakticky tuto hodnotu změnit? Uniká mi něco zřejmého? |
||
mosba Profil |
#5 · Zasláno: 27. 1. 2009, 13:13:48
tj. toto bude řešení s SERVER_ADDR a REMOTE_ADDR, stejným zápisem:
define( 'LOCAL', ( $_SERVER["SERVER_ADDR"] === $_SERVER["REMOTE_ADDR"] || (string)$_SERVER["SERVER_ADDR"] === "127.0.0.1") ? TRUE : FALSE ); Budu velmi vděčný, podud někdo dokáže, že hodnoty přímo od serveru nejsou (nebo lépe jsou) spolehlivé. Díky |
||
AM Profil * |
#6 · Zasláno: 27. 1. 2009, 13:47:06
Jo, IP jde teoreticky podvrhnout, nevím, jak se to dělá, ale občas o takovém útoku slýchám. Pokud to máš řekněme jako ochranu, že k nějakým údajům můžeš přistoupit jen jako admin z localhostu, je vhodné to zkombinovat i s další ochranou (např. heslo). proměnné $_SERVER podvrhnout nelze, ale pokud se uživatel připojí pod falšovanou IP, tak už to není otázka PHP, protože se to pod touto IP skutečně spojí.
|
||
AM Profil * |
#7 · Zasláno: 27. 1. 2009, 13:50:30
jinak stačí krátký zápis:
define( 'LOCAL', ( $_SERVER["SERVER_ADDR"] == $_SERVER["REMOTE_ADDR"])); Trojité rovníto je tam zbytečné, obojí bude stejně vždycky string, stejně tak přetypování SERVER_ADDR na string, který jsi měl v druhé části. Ta je celá zbytečná, protože i v tom případě bude platit tahle rovnost (obojí bude 127.0.0.1). a ?TRUE:FALSE je naprostá zbytečnost, protože samotná podmínka vrací hodnotu TRUE nebo FALSE (př. zápis (1==1) je zcela ekvivalentní zápisu TRUE). |
||
mosba Profil |
#8 · Zasláno: 29. 1. 2009, 13:57:01
Fajn,
Diky |
||
Časová prodleva: 15 let
|
0