Autor Zpráva
Chamurappi
Profil
Moderátor Chamurappi: Vytrženo z Pár připomínek k fungování u ledu.

Kdyby se někdo z vás hodně nudil, můžete vyrobit pro potřeby diskuse tzv. šmírující tečku. Nápad už nosím v hlavě pár měsíců, ale nenašel jsem si na něj čas. Šlo by o jednoduchý serverový skript (může být kdekoliv), který by vracel jednopixelový obrázek vybarvený podle toho, jestli ho už od zadaného okamžiku načetla zadaná IP adresa. Moderátor by pak mohl do vyhozeného/přesunutého příspěvku/vlákna vložit nenápadný [imgright] (floatovaný doprava) a z jeho barvy vytušit, jestli už si určitá osoba všimla zásahu. To, na co by tečka číhala, by mělo být pravděpodobně nasoukané v její adrese, ale opatrně, bez toho, aby z ní šlo vyčíst tu lovenou IP adresu.
Str4wberry
Profil
Jakási „přečtenost“ vlákna registrovaným uživatelem se dá zjistit už i teď bez té tečky.
Joker
Profil
Chamurappi:
ad „šmírující tečka“, skript vcelku triviální, jen taková drobnost:
bez toho, aby z ní šlo vyčíst tu lovenou IP adresu
Když by někdo věděl princip na kterém to funguje a hodně o tu IP stál, asi by ji získal i z nějakého hashe.
Chamurappi
Profil
Reaguji na Jokera:
asi by ji získal i z nějakého hashe
Může to být hash spočítaný po spojení dané IP adresy s IP adresou moderátora (tedy prvního člověka, který si ji nalistuje).
Nebo číslo příspěvku, při čemž šmírující tečka by si sama nějak zjistila IP adresu odesílatele (s pomocí nějakého našeho PHP skriptu).
Nebo nějaký jiný identifikátor přidělený předem.
Důležité je, aby šlo takovou tečku snadno vložit — třeba ve spolupráci se zdejším JS.


Reaguji na Str4wberryho:
Ano, ale jen u registrovaných. Ti si mohou své příspěvky dohledat přes profil, takže tam není většinou tolik nutná.
Joker
Profil
Přemýšlel jsem ještě o tom a mám nějakou kostru.
Bude tedy potřeba předávat solený hash IP, přičemž sůl musí být něco, co nebude nutné předávat v adrese. Hash IP adresy toho kdo tečku vytvořil vypadá schůdně. Případně by to mohl být i hash user-agent řetězce, jestli se dá spolehnout, že v JS navigator.userAgent bude to samé, jako v PHP $_SERVER['HTTP_USER_AGENT'].
Dál bude potřeba ID vlákna, jinak to nebude správně fungovat pokud stejný člověk bude chtít stejnou IP sledovat ve více vláknech.
Ve finále tedy:
sůl = hash(moje IP + id vlákna)
identifikátor = hash(sledovaná IP + sůl)
V adrese by byl identifikátor a ID vlákna.
Chamurappi
Profil
Reaguji na Jokera:
Bude tedy potřeba předávat solený hash IP
Problém se všemi hashi bude, že je musí počítat i JS a prohlížeče k tomu neposkytují žádný nativní aparát.

Což takhle udělat to bez hashů, ale jen s nějakým náhodným unikátním tokenem? Moderátor vyprovokuje zdejší JavaScript, že vyšle požadavek na „http://example.com/tečka?sledovat=88.100.227.210&token=náhodná-směs“, server si uloží, že daná IP adresa patří k danému tokenu a pak moderátor vloží jen obrázek http://example.com/tečka?token=náhodná-směs — z něj nikdo nevyčte sledovanou IP adresu a sledování v různých vláknech nebude kolidovat, protože budou mít vygenerované různé tokeny.
Kajman_
Profil *
Když by byl místní skript, tak si může zkontrolovat, zda je to moderátor a barvit se jen, když na to má uživatel právo, jinak být třebas průhledný.
Joker
Profil
Chamurappi:
To mě taky napadlo (resp. trochu jiné řešení, kde token by generoval a vracel samotný ten skript v prvním kroku), jen jsem se to snažil vymyslet „jednokrokově“.
Chamurappi
Profil
Reaguji na Kajmana:
Omezovat tuto možnost na moderátory asi není nutné. Informace, že vlákno nalistovala určitá (neveřejná) IP adresa, je pro nemoderátory celkem bezcenná. Stejně si může prakticky kdokoliv vyrobit vlastní šmírující tečku.


Reaguji na Jokera:
resp. trochu jiné řešení, kde token by generoval a vracel samotný ten skript v prvním kroku
To by šlo, ale těžko bych ho zjistil, když by ta tečka byla na jiné doméně. Musel bych spustit cizí JS, který ho nastaví, a to se mi z bezpečnostních důvodů moc nechce.
(Několik měsíců jsem předpokládal, že ten serverový skript vyrobím sám, takže se mě ta představa, že nebude na doméně DJPW, docela drží.)
Fisir
Profil
Nevím, jestli o to ještě bude zájem, ale pokoušel jsem se ten skript vyrobit.

Skript sídlí na adrese bordel.j-jaburek.tk/djpw/stecka.php. Všechny parametry se posílají přes GET.
Nejdříve je nutné vytvořit sledování. To se provede tak, že se zašle požadavek na bordel.j-jaburek.tk/djpw/stecka.php?action=new&ip=127.0.0.1. IP adresu samozřejmě zadáte jinou. Pokud chcete, můžete si vygenerovat vlastní token (přidáním &token=nějakýtoken). Jinak se token generuje automaticky. Každopádně, po nastavení dostanete JSON, ve kterém bude vložená IP adresa a token.
Pro vložení stačí vložit obrázek s adresou bordel.j-jaburek.tk/djpw/stecka.php?action=view&token=onenvygenerovanýtoken. Pokud IP adresa již tento obrázek viděla, zobrazí se zelená tečka (jednopixelová). Pokud ještě ne, zobrazí se tečka červená.
Jestliže kdykoli nastane chyba, v hlavičkách bude:
• Buď 500 nebo 400, podle toho, jestli jste něco poslali špatně, a nebo se něco pokazilo na serveru
• Hlavička X-ErrorCode, z ní lze vyčíst číslo chyby kódu
V samotném obsahu bude: Kritická chyba! <code>#?</code>. Pro seznam chybových hlášek a co znamenají, se podívejte sem.
To je snad vše, doufám, že jsem na nic nezapomněl.
— šmíruje mně, už je zelená

Je pěkné, že už si toho někdo všiml. Kdo zkoušel IP 127.0.0.1 a 127.0.0.3? A už se tam objevily další. (Jo aha, to jsou nemejovy testy, sedí to na jeho IP.)
Chamurappi
Profil
Reaguji na Fisira:
Děkujeme. Ona už není tolik potřeba, protože moderátoři již pár měsíců vidí seznam lidí, kteří navštívili dané vlákno, napravo od formuláře… nicméně ten náš seznam ukazuje jen registrované uživatele, takže šmírovací tečka se pořád hodit může.
Fisir
Profil
Reaguji na Chamurappiho [#11]:
Není zač. Je funkcionalita dobrá, nebo bych měl ještě něco vylepšit?
Darker
Profil
Pokud sleduješ jaké IP adresy tam teď jsou, možná tě už napadlo nasadit regulární výraz pro kontrolu překlepů.
nemeja
Profil
Fisir:
Moc pekne, jo jsou to moje testy.
Str4wberry
Profil
Reakce na Chamurappiho:
seznam ukazuje jen registrované uživatele
Můžeme zaznamenávat i neregistrované.

Jinak měla-li by se tečka začít používat, měl by šmírující skript běžet na této diskusi.
Alphard
Profil
Str4wberry:
Můžeme zaznamenávat i neregistrované.
Vzhledem k předpokládanému použití hlavně u ledu, kde se často přesouvá a upravuje, by byl možná lepší seznam IP adres s časem poslední návštěvy. Jinak se bude tečkovat pořád dokola.

Ale stejně si myslím, že za poslední dva roky se hodně věcí změnilo, uživatel je upozorňen na přesun příspěvku, takže sledovací tečky poněkud ztrácejí smysl.
Fisir
Profil
Vidím, že rádi testujete, ale všechny záznamy byly vymazány.
Nyní jsem zavedl kontrolu proti vkládání nesmyslných IP adres. Chyba číslo 8 se zobrazí tehdy, jestliže:
• zadaná IP začíná na „127
• obsahuje něco jiného než čísla a tečky
Chamurappi
Profil
Reaguji na Fisira:
nebo bych měl ještě něco vylepšit?
Jak píše Str4wberry — věnovat nám to, abychom si to mohli rozběhat v námi kontrolovaném prostoru :-)


Reaguji na Str4wberryho:
Můžeme zaznamenávat i neregistrované.
Kdyby ses do toho chtěl pustit, stačilo by asi zaznamenávat jen ty, kteří do vlákna přispěli.
(Občas si říkám, jestli už moc nerozmělňujeme hranici mezi registrovaným uživatelem a pojmenovaným kolemjdoucím. Kdybychom to chtěli dotáhnout do důsledku, registrovaný by se lišil jen tím, že by měl zarezervovanou přezdívku. Což by asi nebylo úplně dobré…)
Fisir
Profil
Reaguji na Chamurappiho [#18]:
námi kontrolovaném prostoru
Škoda, asi mi moc nevěříte.

Nicméně, pokud kód chcete, pošlu vám ho.
HajekJirka
Profil
Fisir:
Nechceš ho vystavit veřejně?
Str4wberry
Profil
Reakce na Chamurappiho:
Občas si říkám, jestli už moc nerozmělňujeme hranici mezi registrovaným uživatelem a pojmenovaným kolemjdoucím.
A je to něco proti něčemu?

Reakce na Fisira:
Škoda, asi mi moc nevěříte.
To není hlavní důvod. Spíš jde o to, že ta tvá stránka (doména) může skončit a možná bych si na to i vsadil že skončí dříve než tato diskuse a budou se to potom muset řešit s tím spojené náležitosti.
Fisir
Profil
Dobře, tady je kód:
$server = "localhost";
$login = "****";
$heslo = "****";
$databaze = "djpw_stecka"; 
MySQL_Connect($server, $login, $heslo);
MySQL_Select_DB($databaze);
mysql_set_charset("utf8");
$action = $_GET["action"];
if($action == "new"){
        $ip = $_GET["ip"];
        $token = $_GET["token"];
    mysql_query("INSERT INTO `djpw_stecka`.`data` (`token`, `ip`) VALUES ('".mysql_real_escape_string($token)."', '".mysql_real_escape_string($ip)."');");
};
if($action == "view"){
    $ip = $_SERVER['REMOTE_ADDR'];
    $token = $_GET["token"];
    $line = mysql_fetch_array(mysql_query("SELECT * FROM `djpw_stecka`.`data` WHERE `token`='".mysql_real_escape_string($token)."';"));
    if($line["ip"] == $ip){
        mysql_query("UPDATE `djpw_stecka`.`data` SET `showed`='1' WHERE `token`='".mysql_real_escape_string($token)."';");
    };
    if($line["showed"] == 0){
        $file = "no.png";
        header("Content-type: image/png");
        ob_clean();
        flush();
        readfile($file);
        exit;
        
    } elseif($line["showed"] == 1) {
        $file = "yes.png";
        header("Content-type: image/png");
        ob_clean();
        flush();
        readfile($file);
        exit;        
    };
};
Kajman
Profil
Možná bych se neuchyloval k ručně přidávaným tečkám a jednoduše si zaznamenával poslední přístup z těch ip, ze kterých byl do daného vlákna přidán příspěvek neregistrovaným uživatelem.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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