Zdravím, potřeboval bych nějakým způsobem ověřovat feu_sessionid souborem .htaccess. Jde o to, že soubory, které mají být řízeny tímto .htaccess nejsou součástí CMSMS a nelze je tak ochránit např. modulem Upload.
Vždy se jedná o adresář, ve kterém se nachází spouštěcí HTML a spusta SWF souborů. Zkoušel jsem to dělat přes cookie, ale ta se dá docela dobře podvrhnout.
Takže jde o to, aby se hodnota feu_sessionid načetla do nějaké proměnné, kterou by si zase mohl načíst .htaccess. Může to být řešeno i jinak, například přes Custom Content, tzn. že pokud bude uživatel přihlášen, tak bude např. proměnná $pristup=1, pokud bude odhlášen, tak bude $pristup=0. Spíš jde o to jak to zqřídit, aby tu proměnnou byl .htaccess schopen odněkud načíst a zpracovat.
Předem dík za nápady
[VYŘEŠENO] Předání feu_session
[VYŘEŠENO] Předání feu_session
Last edited by osxfil on Wed Jul 08, 2009 5:16 am, edited 1 time in total.
Re: Předání feu_session
no ja generuju .htaccess on-fly, podle toho, jak se potrebuje, resil jsem podobnou vec, jako ty. Jinak .htaccess muze kontrolovat spravnou susenku (cookie) a tu muzes uzivateli priradit, jak chces, ja mam mail;md5(userid+mail+mujtajnejstring+time) a nazev susenky userdata - pozor ja to mam jeste v .htaccess zasifrovany suhosinem, kdyz pouzijes mail+md5, tak uvidis trochu neco jineho. a jeste neresim login pres feuusers(to si budes muset dopsat sam) ja prihlasuju uzivatele pres muj login script a pak teprve muzou do webu (intranet v jedne spolecnosti). Nechal jsem tam i rewrite pro pekna url cmsms zbytek veci jsem smazal, ale pro princip kontrolovani susenky nejsou zapotrebi
Code: Select all
IndexIgnore *
Options +FollowSymLinks
RewriteEngine on
# 301 Redirect all requests that dont contain a dot or trailing slash to
# include a trailing slash
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]
# Rewrites urls in the form of /parent/child/
# but only rewrites if the requested URL is not a file or directory
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
ErrorDocument 403 /login.php
SetEnvIf Request_URI "(/curversion\.php)$" allow
SetEnvIf Request_URI "(/login\.php)$" allow
SetEnvIf Request_URI "(/login/bg-top.png)$" allow
SetEnvIf Request_URI "(/login/bg-bottom.png)$" allow
SetEnvIf Request_URI "(/login/login.css)$" allow
SetEnvIf cookie "userdata=yHn ... 3jv0." allow
...
SetEnvIf cookie "userdata=FQJ ... qn4." allow
Order deny,allow
Deny from all
Allow from env=allow
Re: Předání feu_session
Díky za radu, něco podobného už jsem také zkoušel. Mám tento UDT, který mi v CustomContent po přihlášení tvoří náhodný řetezec:
pak si pomocí UDT uložím cookie
Pomocí formuláře se skrytými poli, ve kterých je URL odkazovaného souboru a také stejná hodnota jako v té cookie přesměruje metodou POST na požadovanou stránku, kde si PHP skript ověří, zda souhlasí hodnota z cookie s tou odeslanou a pokud ano, tak se začne otvírat požadovaný soubor main.swf
Problém je v tom, že klient nechce, aby ta cookie měla statickou hodnotu (bude to pro několik tisíc uživatelů), protože se dá podvrhnout - a tady je kámen úrazu. A ještě větší problém je, že pokud si někdo dá přímý odkaz na ten main.swf tak se neověřuje samozřejmě nic.
Jde nějak zařídit, aby .htaccess uměl zpracovávat tahle dynamická data nebo umí ověřit jenom napevno nastavené hodnoty cookie?
Když už jsi psal o tom šifrování hodnoty cookie - jak se to provádí prakticky (já do toho PHP odesílám úplně stejnou hodnotu, která je i v cookie, tzn. zašifrovanou). Předpokládám, že bych měl vytvořit dvě varianty - zašifrovanou a nezašifrovanou. Tu zašifrovanou dát do cookie a nezašifrovnou do .htaccess nebo obráceně? A jak to .htaccess porovná?
Omlouvám se ze začátečnícký dotazy, ale tak nějak jsem do toho nechtěně spadl, v první řadě vůbec nejsem nějaký webař, ale bohužel klient šetří a nechce si to nechat udělat u profíků.
Code: Select all
$referenceid = md5(mktime()*rand());
$smarty->assign('cas',"$referenceid");
Pomocí formuláře se skrytými poli, ve kterých je URL odkazovaného souboru a také stejná hodnota jako v té cookie přesměruje metodou POST na požadovanou stránku, kde si PHP skript ověří, zda souhlasí hodnota z cookie s tou odeslanou a pokud ano, tak se začne otvírat požadovaný soubor main.swf
Problém je v tom, že klient nechce, aby ta cookie měla statickou hodnotu (bude to pro několik tisíc uživatelů), protože se dá podvrhnout - a tady je kámen úrazu. A ještě větší problém je, že pokud si někdo dá přímý odkaz na ten main.swf tak se neověřuje samozřejmě nic.
Jde nějak zařídit, aby .htaccess uměl zpracovávat tahle dynamická data nebo umí ověřit jenom napevno nastavené hodnoty cookie?
Když už jsi psal o tom šifrování hodnoty cookie - jak se to provádí prakticky (já do toho PHP odesílám úplně stejnou hodnotu, která je i v cookie, tzn. zašifrovanou). Předpokládám, že bych měl vytvořit dvě varianty - zašifrovanou a nezašifrovanou. Tu zašifrovanou dát do cookie a nezašifrovnou do .htaccess nebo obráceně? A jak to .htaccess porovná?
Omlouvám se ze začátečnícký dotazy, ale tak nějak jsem do toho nechtěně spadl, v první řadě vůbec nejsem nějaký webař, ale bohužel klient šetří a nechce si to nechat udělat u profíků.
Re: Předání feu_session
hm, pri tisici lidech to bude docela problem, ja to mam pro zhruba 20, takze neni problem ho generovat on-fly, pri tisici docela problem. Ja pri kazdym loginu uzivatele jemu vygeneruju novou md5, tzn: ze kazdy uzivatel pri kazdem loginu ma jedinecnou sekvenci znaku. Vim, ze kdyz jsem to resil, tak jsem nasel custom mod, ktery umel kontrolovat cookies oproti mysql zaznamum. Pokud zaznam existuje, tak povoli, pokud neexistuje, tak zakaze pristup. to by se ti hodilo, bohuzel nevim jak se to jmenovalo.
Re: Předání feu_session
Po asi týdnu marných pokusů jsem to nakonec vyřešil přes .htaccess a HTTP autentifikaci. Bude trochu pakárna se správou hesel v htpasswd, ale nenašel jsem nic jiného, co by mohlo blokovat neoprávněné přístupy líp.
Jen bych tam chtěl přidat ještě kontrolu na existenci feu_sessionid cookie, stačí na její pouhou existenci, aby se to hůř linkovalo z externích webů, protože zabránit přístupu v případě, že někdo někomu dá svoje username a heslo asi dost dobře jinak nejde.
Jen bych tam chtěl přidat ještě kontrolu na existenci feu_sessionid cookie, stačí na její pouhou existenci, aby se to hůř linkovalo z externích webů, protože zabránit přístupu v případě, že někdo někomu dá svoje username a heslo asi dost dobře jinak nejde.
Re: Předání feu_session
Code: Select all
SetEnvIf cookie "nazevsusenky=nejakadata" allow
Order deny,allow
Deny from all
Allow from env=allow
Re: Předání feu_session
Takže jsem si ještě nakonec přidal tu kontrolu na feu_sessionid. Funguje to v PHP následovně:
1. skript si zkontroluje existenci feu_uid a feu_sessionid cookies a načte jejich hodnoty
2. pošle dotaz na MySQL, jestli hodnota feu_sessionid cookie odpovídá hodnotě session v databázi podle ID (aby nemohlo dojít k podvržení cookie)
3. spustí spouštění obslužné HTML stránky jako include
plus k tomu je ještě HTTP autentifikace, protože tenhle mechanismus nefunguje např. na flash soubory.
Celý kód je tady:
Jen je škoda, že .htaccess neumí sám o sobě kontrolovat session, to by bylo jiný kafe
1. skript si zkontroluje existenci feu_uid a feu_sessionid cookies a načte jejich hodnoty
2. pošle dotaz na MySQL, jestli hodnota feu_sessionid cookie odpovídá hodnotě session v databázi podle ID (aby nemohlo dojít k podvržení cookie)
3. spustí spouštění obslužné HTML stránky jako include
plus k tomu je ještě HTTP autentifikace, protože tenhle mechanismus nefunguje např. na flash soubory.
Celý kód je tady:
Code: Select all
<?
if(isset($_COOKIE[feu_sessionid]) && ($_COOKIE[feu_uid]))
{
$id=$_COOKIE[feu_uid];
$spojeni = mysql_connect("localhost","username","password");
mysql_select_db("database_name") or die(mysql_error());
$data1=mysql_query("SELECT sessionid, lastused, userid FROM cms_module_feusers_loggedin WHERE userid='$id'");
while ($data=mysql_fetch_array($data1))
{
$dtbase=$data['sessionid'];
}
$hash=$_COOKIE[feu_sessionid];
if ($hash==$dtbase)
{
include_once("flipviewerxpress.html");
}
else
{
header("HTTP/1.1 403 Access Forbidden");
header("Content-Type: text/plain");
header("Location: http://euro.bocekmedia.net/unauthorized.html");
}
}
else
{
header("HTTP/1.1 403 Access Forbidden");
header("Content-Type: text/plain");
header("Location: http://euro.bocekmedia.net/unauthorized.html");
}
?>