PDA

Pogčedajte punu verziju : problem -> HTTP_REFERER


flash_back
28. 01. 2007., 17:51
Pozdrav pre svega..

treba mi mala pomoc a neznam kome drugo da se obratim.. problem je sledeci, napisao sam kod za jednu anketu (http://www.overheat-tuning.com/anketa.php), cak uradio i ceo (100% ®) background sistem (http://www.overheat-tuning.com/backeye/) za istu (interesu je me bas sta rade ljudi na anketama i kako se ponasaju)..

i imam jedan banalan problem.. ne mogu da nateram online server da mi ispise $_SERVER['HTTP_REFERER'], dobijam empty value a s tim korakom kontam dali je u pitanju neki hack/napad..

dali neko ima neku ideju kako da se ovo izvede?

bluesman
28. 01. 2007., 19:55
Glupo pitanje, ali nadam se da ne pristupaš direktno scriptu u kojem želiš da ispišeš HTTP_REFERER ? ;)

flash_back
28. 01. 2007., 20:49
Pa odgovor je i da i ne ;)

Konkretno na post forme uporedjujem domen adresu sa predhodnim url-om, ako postoji match anketu karakterisem kao validnu i pravim zapis u bazi, sve suprotno karakterisem kao napad..

problem je u tome da nemogu da izvucem od servera HTTP_REFERER, dobijam konstantno praznu vrednost (ista je prica sa linkovima, bez posta forme)..

bluesman
28. 01. 2007., 21:47
Ne mogu da ti kažem konkretno jer nemam sada strpljenja da gledam tuđi kod, ali evo probaj:

http://www.devprotalk.com/bluesman/b.php

kada klikneš na link izađe:

referer: http://www.devprotalk.com/bluesman/b.php

A to je na istom serveru na kojem je i tvoj sajt.

Ili klikni na http://www.devprotalk.com/bluesman/a.php
izaći će ova strana kao referer.

Peca
28. 01. 2007., 22:12
mozda imas antivirus/firewall pa ti on blokira referer.

imaj na umu da postoje korisnici ciji browser ne ostavlja referer, sto zbog antivirusa/firewalla, sto zbog konfiguracije browsera...

ne mozes na referer da se oslanjas kao na 'sigurnu vrednost', jer em moze da ne bude set-ovana [av/fw/browser blokira], em moze i da se fake-uje [falsifikuje, podmetne referer kao da je sa tvog sajta, a zapravo uopste ne dolazi odatle]

flash_back
28. 01. 2007., 22:16
je*em mu miša :) evo kako kod mene izgleda taj a.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Strana A</title>
</head>

<body>

referer:

</body>
</html>

čudno, nema šta! izgleda da je mozda problemčić u firewallu, sad ću da proverim...

---
e, sad sam snimio post :) i da, firewall je bio u pitanju..


ne mozes na referer da se oslanjas kao na 'sigurnu vrednost', jer em moze da ne bude set-ovana [av/fw/browser blokira], em moze i da se fake-uje [falsifikuje, podmetne referer kao da je sa tvog sajta, a zapravo uopste ne dolazi odatle]

sta predlazes? mozda da nesto izvrtim preko sesije i kolacija? poznato mi je samo to da anketa nemoze biti validna ako je npr: $_SESSION['posete'] == 1 ;) mozda mogu na tome nesto da poradim..

flash_back
29. 01. 2007., 00:01
opusteno, snasao sam se :)

Po meni jedino logicno resenje je bilo da imam nesto u mojoj stranici sto ne moze da se generise iz neke druge... i nista, stvar je simple a koristi - imam $cist_kod random string, njega stavljam u jedno sakriveno polje a sha1 tog random stringa stavljam u kolacic.. i resto je puko uporedjivanje :)

if(isset($_COOKIE['OverheatCookie'])) {
if (sha1($_POST['kod']) == $_COOKIE['OverheatCookie']) {
$sigurnost = "ok";
} else {
$sigurnost = "****";
}
} else {
$kolacici = "****";
}

$vreme_kolacica = 86400 + time();
$cist_kod = mt_rand();
$sigurnosni_kod = sha1($cist_kod);
setcookie(OverheatCookie, $sigurnosni_kod, $vreme_kolacica);

ajd sad na anketu (http://overheat-tuning.com/);)

Peca
29. 01. 2007., 16:49
a ako browser blokira i cookies? :D
jedino sigurno resenje je preko sesija...
mada, procenat onih koji blokiraju cookies je jako mali, pa sto bi se zamlacivao sa tim...

Petar Marić
29. 01. 2007., 18:38
A preko čega misliš da pratiš sesiju? SID možeš slati samo ili kroz cookie ili kroz URL, a ovo drugo ne savetujem - em ružno, em opasno.

Peca
29. 01. 2007., 19:55
ali ako korisiku ne radi cookie, jedino ti ostaje URL.
web aplikacija bi sama trebala da izvali da li korisniku radi cookie ili ne...

Petar Marić
29. 01. 2007., 20:58
A šta ćeš da radiš kada te neko ovako napadne (http://www.djangobook.com/en/beta/chapter20/#cn74)?

Mislim da nije vredno truda da se zbog 3-5% korisnika izlažeš dodatnim sigurnosnim rizicima - IMHCO bolje bi bilo da to vreme utrošiš na proveru sigurnosti sistema.

flash_back
29. 01. 2007., 22:32
preko sesije vucem samo capitchu ;) ali ako se negde varam molim te me ispravi :)

A preko čega misliš da pratiš sesiju? SID možeš slati samo ili kroz cookie ili kroz URL, a ovo drugo ne savetujem - em ružno, em opasno.

ne pratim sesiju, pratim status na submit. ako zelis mogu da ponovo podignem open backeye za dpt, samo onda moram da 'falsiram' zapise inace bih direktno ugrozio privatnost anketiranih :) ?

ali ako korisiku ne radi cookie, jedino ti ostaje URL.
web aplikacija bi sama trebala da izvali da li korisniku radi cookie ili ne...

naravno, izbaci error ako nemoze da se setuje kolacic ;)

oliver
01. 02. 2007., 21:02
koliko znam, ne mozes provaliti je li korisnik prihvatio cookie ili ne. setcookie uvijek vrati true (osim ako si nesto zabrljao sa samim parametrima), nema feedback-a od browsera ako su cookies iskljuceni.

If setcookie() successfully runs, it will return TRUE. This does not indicate whether the user accepted the cookie.

MorenoArdohain
01. 02. 2007., 21:14
^ Obicno se setuje jedan test cookie, i script odmah pokusa da procita je li setovan. Ako nije, znaci da je cookie u browseru iskljucen.

Ilija Studen
01. 02. 2007., 21:57
^ Zar za ovo nije potreban refresh? Ako se ne varam cookie se setuje kroz HTTP header tako da je nemoguće videti da li je cookie setovan dokle god se stranica ne osveži. Ispravite me ako grešim...

MorenoArdohain
01. 02. 2007., 22:07
^ Tako je. Setovao bi cookie na prvoj strani, na sledecoj bi se proverio da li je uopste setovan test cookie, ako nije, znaci da je iskljucen.

Mada, moze da se iskoristi iframe ili ajax u okviru iste strane.

oliver
01. 02. 2007., 22:17
pa tako reci... to znam, ali je po tvojoj poruci izgledalo kao da script SAM radi posao pa sam se se nasao u nedoumici i sa jednim "wtf" iznad glave :)

flash_back
01. 02. 2007., 22:39
opusteno :) znaci na osnovu submita pratim i kategorisem greske, ako je npr: bas sve od provera ok, pavim zapis tipa 0 ili 'sve je ok' sa svim mogicim parametrima (ip, trenutno vreme, dolazeci url itd..). ako je npr: sve lepo popunjeno a samo captcha 'ne pase' dobijam error 'captcha greska'.. tu je i tip 'greska' kao i 'napad'.. ovo zadnje ume da prevari samo kada korisnik uradi refresh posto je uradio submit.. ali lako to utvrdim preko dolazeceg url-a (sem ako ga bas neko nije sad falsirao)..

inace malo sam sredio sigurnosan kod, sada je nesto tipa [sha1($flash_back.$cist_kod.$flash_back);].. radi po'so :)

ajd malo sredim baze pa cu da vratim backeye ;)

---
edit:
---

nego da dodam, bilo je i likova (u bukvalnom kontekstu) koji se prijave, znaci ime, prezime real email i ne ostave bas ama nikakav komentar niti nista sto bi moglo koristiti.. cak izaberu opciju da ne zele da se prijave na mailing listu.. hm, pa sto su se onda uopste i prijavljivali da mi je samo znati ;)

nego imam mali problem, mail koji salje server nakon uspesne prijave karakterise se kao spam u gmail-u tj. nepozeljna posta.. mislim da je nesto do samog headera poruke ["\"Overheat-Tuning\" <admin@overheat-tuning.com>"] pa ako moze neki mali savet bilo bi lepo :)