Autor Zpráva
mosba
Profil
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 *
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 *
jo, jedná se o elementy pole $_SERVER.
mosba
Profil
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
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 *
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 *
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
Fajn,
Diky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: