Nejnovější X.Org X server 21.1.25 a Xwayland 24.1.14 řeší 12 bezpečnostních chyb.
Google Chrome 155 byl prohlášen za stabilní. Přináší podporu JPEG XL (.jxl). Opraveno bylo 247 bezpečnostních chyb.
Konference OpenAlt 2026 hledá přednášející. Přihlásit přednášky lze do neděle 11. října. Konference proběhne o víkendu 7. a 8. listopadu na půdě Fakulty informačních technologií VUT v Brně. Témata konference jsou: Otevřený a svobodný software, IoT a Hnutí tvůrců, Vzdělávání, Bezpečnost a soukromí, Otevřená společnost, komunity a data, OpenMobility a další.
Byla vydána nová verze 10.6 sady aplikací pro SSH komunikaci OpenSSH. Přináší řadu důležitých bezpečnostních oprav, vylepšení funkcí a oprav chyb. Povoluje hybridní postkvantový podpisový algoritmus ssh-mldsa44-ed25519.
Americká společnost Reflection AI světu představila Beam, open-weight model s 501 miliardami parametrů (z toho 23 miliard aktivních), určený především pro programování a práci autonomních agentů. Podle autorů jejich model nabízí výkon srovnatelný s většími modely při výrazně nižších nárocích na výpočetní výkon. Beam nyní ještě prochází závěrečným testováním, na stránkách Reflection AI se však lze zaregistrovat a získat předběžný přístup. Váhy modelu, dokumentace a nástroje pro vývojáře mají být zveřejněny v průběhu tohoto měsíce.
OpenCourant je komunitní fork OpenRadioss, tj. open source softwaru pro simulace havárií, nárazů a vysoce nelineárních dynamických dějů metodou konečných prvků. Společnost Siemens v loňském roce dokončila akvizici společnosti Altair Engineering, jež před čtyřmi lety uvolnila open source verzi OpenRadioss svého proprietárního softwaru Radioss. Minulý týden Siemens OpenRadioss pohřbil. Integroval jej do svého softwaru Simcenter, webovou stránku OpenRadioss přesměroval na Simcenter a repozitář OpenRadioss na GitHubu odstranil.
Pořadatelé devátého ročníku komunitního setkání správců nejen českých a slovenských sítí – CSNOG 2027, které se uskuteční 20. a 21. ledna, vyhlásili Call for Abstracts. Náměty na vystoupení mohou zájemci přihlašovat do 31. října na webu akce a vybírat mohou ze tří sekcí – správa sítí, legislativa a regulace a akademické projekty. Zveřejněny byly také Call of Partners určené sponzorům a partnerům setkání, kteří by například chtěli mít na
… více »Strata je open-source inferenční engine, který umožňuje lokálně provozovat rozsáhlý čínský model Qwen3.8-Flash-Next, který by jinak nejspíše vyžadoval serverovou infrastrukturu, na běžném herním počítači s alespoň 12 GB VRAM, 32 GB RAM a dostatkem místa na SSD. Nároky na paměť a rychlost generování se liší s použitou variantou modelu Qwen. Zdrojový kód je dostupný na GitHubu, pod licencí MIT.
Americký prezident Donald Trump oznámil vznik federální Jednotky pro superinteligenci (Super Intelligence Force), která má koordinovat postup vlády, technologických firem, náboženských organizací a dalších institucí v oblasti rychle se rozvíjející umělé inteligence (Trumpem oficiálně nazývanou superinteligencí). SIF, podřízená přímo Trumpovi, má pomoci Spojeným státům udržet v oblasti SI technologický náskok nad světem a
… více »Klient je e-mailový klient pro GNOME s nativní podporou Proton Mailu, PGP a spamfiltrem řízeným AI. Napsaný je v Go s GTK4 a libadwaita. Připojuje se přímo k Proton Mailu (bez Proton Bridge), ke Gmailu, k Seznam.cz a k libovolné schránce IMAP/SMTP. Každou novou zprávu nejdřív posoudí spamfiltr a teprve potom ji ukáže a ohlásí. Rozhraní je česky a anglicky.
Minule jsem vytvořil formulář pro přihlášení, ale nedodělal jsem akci, která zpracovává data z formuláře. Zatím jsem jen provedl kontrolu, zda jsou data do formuláře zadaná validní. Dnes se tedy podívám na jednu z metod, jak v Zendu provést autentizaci, a to asi nejpoužívanější - ověření uživatelem zadaného loginu a hesla oproti záznamu v databázi.
Pro účely autentizace Zend nabízí třídu Zend_Auth. Tato třída samotná ale ke skutečnému provádění autentizace neslouží. Slouží spíše jako obalující třída pro různé úkony s autentizací spojené (krom provedení autentizace např. k uložení výsledku atd.). Autentizace samotná je prováděna autentizačními adaptéry. Adaptér musí implementovat rozhraní Zend_Auth_Adapter_Interface, které definuje pouze jedinou metodu, a tou je metoda authenticate(). Pro autentizaci oproti záznamu v databázi je v Zendu již připraven adaptér Zend_Auth_Adapter_DbTable (dále jsou dostupné adaptéry pro autentizaci přes Ldap, OpenId a další). Adaptéru nastavíme atributy potřebné pro úspěšné provedené autentizace daným způsobem (např. v jaké tabulce databáze je login a heslo) a zavoláme metodu authenticate(). Ta jako výsledek vrátí (i neúspěšném případě) výsledek reprezentovaný třídou Zend_Auth_Result. Tento výsledek pak můžeme uložit a později opět získat pomocí třídy Zend_Auth. Pokud neurčíme jinak, bude Zend_Auth výsledek ukládat do session. Jelikož Zend_Auth je singleton, její instanci lze získat pouze přes statickou metodu Zend_Auth::getInstance().
Vše asi bude srozumitelnější z příkladu. Předpokládejme, že máme v databázi následující tabulku, kde je krom loginu a hesla navíc uložena informace, zda je účet aktivní a navíc uživatelova role (tu pak využijeme při autorizaci):
CREATE TABLE userlogin(login_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,login VARCHAR(255) UNIQUE NOT NULL, passwd VARCHAR(32) NOT NULL, active BOOLEAN NOT NULL, role VARCHAR(10) NOT NULL);Z registrů získáme v nich uložené spojení do databáze a vytvoříme instanci
Zend_Auth_Adapter_DbTable:
$db = Zend_Registry::get('db');
$authAdapter = new Zend_Auth_Adapter_DbTable($db);
Na adaptéru nastavíme tabulku, kde jsou uloženy autentizační údaje a jméno sloupečku v tabulce, kde je login a kde heslo:
$authAdapter->setTableName('userlogin');
$authAdapter->setIdentityColumn('login');
$authAdapter->setCredentialColumn('passwd');
$authAdapter->setCredentialTreatment('MD5(?) AND active = 1');
Poslední řádek určuje, jak se má zacházet s heslem (v našem případě získat MD5 hesla, neboť v databázi je uloženo jen MD5 hesla) a další dodatečnou podmínku, aby byla autentizace úspěšná (zde je dodatečná podmínka, že účet musí být aktivní).
Nyní ještě musíme nastavit pro jaká data chceme autentizaci provádět:
$authAdapter->setIdentity($username); $authAdapter->setCredential($passwd);a můžeme zavolat
authenticate(), a to jak již bylo řečeno, přímo na adaptéru nebo na instaci Zend_Auth:
$auth = Zend_Auth::getInstance(); $result = $auth->authenticate($authAdapter);Jestli byl pokus o autentizaci úspěšný, zjistíme zavoláním metody
isValid() na objektu $result (instance Zend_Auth_Result).
Jestliže voláme metodu authenticate() výše uvedeným způsobem (tj. na instanci Zend_Auth), Zend_Auth krom zavolání metody authenticate()na adaptéru uloží v případě úspěšné autentizace identitu uživatele do session.
Identitu můžeme získat i z objektu $result zavoláním metody getIdentity() a nebo (to je asi nejčastější a nejdůležitější způsob) přes Zend_Auth opět voláním metody getIdentity() (ještě před tím můžeme ověřit, že identita existuje zavoláním metody hasIdentity()). Tj. kdekoli v aplikaci můžeme ověrit, zda je uživatel přihlášen, a jestliže ano, tak se podívat, co je to za uživatele:
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$identity = $auth->getIdentity();
}
Identita obsahuje jen login uživatele. Pokud bychom chtěli, aby obsahovala i další údaje, můžeme do ní z login tabulky načíst i další údaje, slouží k tomu metoda getResultRowObject():
$data = $authAdapter->getResultRowObject(null,array('passwd','active'));
$auth->getStorage()->write($data);
Zde jsem načetli z tabulku celou řádku až na heslo, které je zbytečné (ba dokonce nebezpečné) v session ukládat a stejně tak je dál zbytečný atribut active. Metoda getResultRowObject() má dva parametry. První parametr metody getResultRowObject() je pole obsahující názvy sloupců tabulky, které chceme získat (pokud je null, berou se všechny) a druhý pole s názvy sloupců, které chceme vynechat (pokud první parametr nebude null, pak se již na druhý argument nebere zřetel). Nyní tedy máme v případe úspěšné autentizace uživatele v session uložen jeho login, id a roli. Roli příště využijeme pro autorizaci.
Pokud se uživatel odhlásí, patrně by bylo dobré vymazat jeho identitu. To se snadno zařídí následujícím způsobem:
Zend_Auth::getInstance()->clearIdentity();Celá akce pro přihlášení, minule nedodělaná, by tedy mohla vypadat třeba takto:
public function authAction(){
if (!$this->getRequest()->isPost()) {
return $this->_forward('index');
}
$form = $this->getLoginForm();
if (!$form->isValid($_POST)) {
$this->view->form = $form;
return $this->render('showform');
}
$db = Zend_Registry::get('db');
$authAdapter = new Zend_Auth_Adapter_DbTable($db);
$authAdapter->setTableName('userlogin');
$authAdapter->setIdentityColumn('login');
$authAdapter->setCredentialColumn('passwd');
$authAdapter->setCredentialTreatment('MD5(?) AND active = 1');
$authAdapter->setIdentity($username);
$authAdapter->setCredential($passwd);
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
$data = $authAdapter->getResultRowObject(null,array('passwd','active'));
$auth->getStorage()->write($data);
$this->_redirect('/loginNeeded');
} else {
$this->view->message = 'Login failed.';
}
}
A pro úplnost ještě akce pro odhlášení:
function logoutAction(){
Zend_Auth::getInstance()->clearIdentity();
$this->_redirect('/login');
}
Tiskni
Sdílej:
$prihlaseny = Zend_Auth::getIdentity();