Autor Zpráva
Fisak
Profil
Moderátor Chamurappi: Přesunuto z zjištění verze mého systému.

Zdravím. Rád bych věděl jak zjištujete jaká je nejnovější verze vašeho sytému. Já současnou verzi mam uloženou v DB a tu nejnovější externě na serveru. Bohužel na Linuxech to píše chyba portu. Proto bych rád věděl jak to řešíte vy. Předem děkuji za odpověď.

Moje řešení:
$version = preg_replace('#[^0-9\a-z\(\)\ \-\_\.]#ui', '', file_get_contents('http://www.adresa.hys.cz/uploads/version.txt'));
if(options("version") != $version) echo "<form method=\"post\" action=\"".options("mod_rewrite", "admin", "update")."\"><tr><td>Nejnovější verze: </td><td><pre>".$version." <input name=\"actualization\" type=\"submit\" class=\"form\" value=\"".ucfirst(translate("update"))."\"/></form></pre></td></tr>";
Fisak
Profil
Zdravím. Rád bych zjišťoval a porovnával verzi mého systému s aktuální verzí ale nevím co na to použít. Nyní to dělám tak že mám web např. www.adresa.cz kde mi běží můj systém na verzi 1.0.0 BETA a pomocí file_get_contents('http://insignia.funsite.cz/uploads/version.txt') zjišťuju že je verze 1.0.1 BETA tzn. novější. na www.adresa.cz zjišťuju z db na jaký verzi běží můj systém a z adresy http://insignia.funsite.cz/uploads/version.txt zjišťuji nejnovější verzi systému. Jenže problém je v tom že se mi zdá že soubor.txt se dá lehce hacknout. A navíc nevím jestli je toto nejšťastnější řešení proto bych rád věděl jak to děláte vy. Popř. vaše zkušenosti s tímto.
Napadají mě 3 řešení:
1. zmíněné: moje verze(z db), nejnovější verze z txt souboru
2. moje verze z db, nejnovější verze s php souboru kde bude fce vypisovat z db hlavního serveru nejnovější verzi (ale nevím jestli tím nebudou moct zjistit heslo apod. k tomu serveru)
3. RSS - ale to bych nerad použil jelikož s tím nemám zkušenosti.

Předem díky za všechny odpovědi.
Tori
Profil
Co je účelem - nabídnout uživateli update systému, nebo chcete mít přehled, kdo to používá a jakou verzi? První bych dala jako vlastnost administrace (přepínač mezi "ověřovat vždy" a "ověřovat jen na vyžádání"), druhé jako součást instalátoru. (ale je to jen názor bez zkušenosti)
unlucky
Profil
pouzil bych iframe na zobrazovani nejnovejsi verze a link ke stazeni
Str4wberry
Profil
Jak se dá soubor.txt lehce hacknout?
Fisak
Profil
Tori:
Nooo dobrý nápad ale spíš mi šlo o to jak to udělat.. jeslti práv mým způsobem nebo nějak jinak...

unlucky
no to mi přijde dost nepraktické a neodpověděl si jakým způsobem zjistit novou verzi.

Str4wberry:
no nevím jak ale můj názor je že určitě lépe než promyšlený objekt v phpčku....


jinak připomínám že chci zjistit písemný údaj z jiného serveru nikoliv aktualizovat svoje soubory.. jen zjistit verzi mého systému porovnat s aktuální a upozornit na to.. viz. výše...
Str4wberry
Profil
Cílem je si ve své kopii cizího systému hlídat aktuálnost verze oproti cizí stránce? Nebo upozorňovat na nové verze v cizích kopiích tvého systému?
mylan
Profil
V CMS mám kontrolu, kde každých pár dní sa kontroluje aktuálnosť verzie. Na domovskej stránke je uložený txt súbor s číslom poslednej verzie. Na zisťovanie tak používam tento kód (upravené s adresou čo si tu napísal):
<?php
function get_latest_version() {
  $errmsg = false;
  $fp = @fsockopen('insignia.funsite.cz', 80, $errno, $errstr, 30);
  if (!$fp) return '';
  else {
    $out = "GET /uploads/version.txt HTTP/1.1\r\nHost: insignia.funsite.cz\r\nConnection: Close\r\n\r\n";

    fwrite($fp, $out);
    while (!feof($fp)) {
      $latest_version_number = fgets($fp, 128);
    }
    fclose($fp);
    return trim($latest_version_number);
  }
}


// použitie:
$latest_version = get_latest_version();
echo 'Najnovšia verzia: ' . $latest_version;

?>
Fisak
Profil
Str4wberry:
vem si že já programuj "svůj CMS" a teď mám web... např. www.cms.cz a teď si někdo můj cms stáhne a vidí jestli má tu nejaktuálnější verzi nebo si jí musí aktualizovat..
Tori
Profil
Fisak:
Jenže problém je v tom že se mi zdá že soubor.txt se dá lehce hacknout.
Nechápu, proč by to někdo dělal, když tím nic nezíská. Podle [#1] chcete informovat vlastníky kopií vašeho CMS o dostupném updatu. Když tedy změním číslo verze svojí kopie, nebudou mě otravovat upozornění na update a to je vše. Když budu ale schopná neautorizovaně měnit soubory na vašem serveru, najdu určitě kopec zajímavějších věcí, než obyčejný texťák s číslem verze (např. napsat na úvodní stránku červeně, že autor tohoto CMS si neumí zabezpečit ani vlastní web.).

Jinak v tom .txt může být 010000.01 ; verze 1.0.0 (rev.1), teda číslo verze jako desetinné i lidsky čitelné, pro snazší strojové zpracování.
Str4wberry
Profil
Aha.

Tak to mě ještě napadá řešení, kdy je na stránce CMS JavaScript, který obsahuje funkci pro uložení čísla verze do sušenky s platností dle četnosti, jak často sytém upravuješ. V každé instalaci systému je potom JS funkce, která v případě, že není nastavená sušenka s verzí, připojí ke stránce již zmíněný externí JS a ten ji nastaví. K té sušence se potom samozřejmě může dostat i PHP. Stahovat při každém načtení soubor pomocí fsockopen mi přijde zbytečně zdržující. Ale zase když ti někdo hackne ten JS, tak dostane zajímavější způsoby, jak toho využít. :–)
Fisak
Profil
Str4wberry:
mnooo dobrý nápad.. a co takhle to udělat tou fcí v PHP jen udělám fci
function version () {
připojení k db nebo .txt souboru
}
a pak echo version();
vlastně se jen vypíše výsledek který na ostatní blogy budu postovat file_get_contents()

Jinak JS bohužel neovládám ... takže do toho bych se moc nepouštěl no :-) ale díky za návrh :-)

Tori:
no tak může to využít třeba pro php injekci.. samozřejmě mám to zabezpečený ale určitě sou i jiné útoky. A info o nové verzi nemusí být otravné pokud ho nedáš font-size: 36;
mylan
Profil
Len otázka, moje riešenie ti nevyhovovalo? Lebo mám pocit, že presne to potrebuješ...
Str4wberry
Profil
Tou funkcí v PHP to samozřejmě udělat můžeš. Akorát doporučuji tu kontrolu zbytečně neprovádět při každém načtení. A ještě je vhodné zmínit drobné úskalí PHP přístupu, čímž je závislost na zapnutém allow_url_fopen.
Fisak
Profil
Str4wberry:
teď nevím jestli nebudu kecat.. ale allow_url_fopen potřebuje údaje od vzdáleného ftp aby to mohlo otevřít ne ?? nebo sem tě možná špatně pochopil.. můžeš prosím uvést příklad??

mylan:
noo přijde mi to stále složité :-) chci něco triviálního ale zároveň bezpečného aby se to pokaždý nenačítalo 4 hodiny :-)
mylan
Profil
Ja to samozrejme kontrolujem len raz za 7 dní (vytvorím cookie s platnosťou 7 dní a ak cookie neexistuje, tak skontrolujem aktuálnosť). Je to určite spoľahlivejši ako použiť file_get_contents pre vzdialené súbory.
Prečo by sa to načítalo 4 hodiny? Tu je príklad aj s výpisom zdrojového kódu http://mnewscms.com/insignia-test.php

Ale ak nájdeš niečo lepšie a spoľahlivejšie, budem len rád.
Str4wberry
Profil
Pointa je v tom, že může být tato možnost ze strany provozovatele hostingu zablokovaná. Tudíž uživatele svého systému, který nemůže tuto možnost změnit, připravíš o funkci pro kontrolu aktualizace.

Ještě mě napadlo, že by šlo použít obrázek. Vkládala by se adresa http://example.com/aktualizace.php?verze=číslo verze systému a skript na tvém webu by rozhodl, jestli je verze aktuální (vrátil by prázdný 1 × 1 obrázek) nebo ne (zobrazil by obrázek s upozorněním). Ale podobně jako <iframe> to trpí zbytečným požadavkem při většině načtení stránky, kdy se verze nemění.

To JS řešení se mi proto jeví jako nejvýhodnější. Ale úplně ideální také není — může to představovat bezpečnostní riziko, protože se do stránky vkládá cizí skript, nad kterým nemá uživatel systému kontrolu a má (ten skript) docela dobré možnosti něco dělat (když autorovi CMS rupne v bedně nebo jeho web někdo hackne, tak je problém).
Ugo
Profil
co je vlastně za problém, existuje jen jedno reálné lehké řešení, na straně uživatele mít uloženou jeho verzi, v db, v souboru .. to je fuk a pak se zeptat vzdáleného serveru (ať už skriptu(moderně api :) ) nebo souboru) jaká je ta aktuální, bez toho požadavku na vzdálený server to udělat nejde, kontrolovat interval můžeš dle cookie nebo uložené hodnoty posledního podívání, ale ať uděláš cokoliv, vždy skončíš na vzdáleném serveru, asi nejleepší je zeptat se javascriptem (pokud máš jquery tak úplně krásné) nebo posláním hlaviček a přečtením odpovědi v phpku, tak aby to bylo zcela 100% nikdy neuděláš protože tak jako se nemůžeš spolehnout na nastavení php, tak se nemůžeš spolehnout na funkční a zaplý JS.
Fisak
Profil
mylan:
nakonec sem přece jen využil tvé řešení..

Ale díky moc všem rozhodně sem se naučil pár dalších dobrých řešení :-) Ješetě jednou děkuji všem za rady..

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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