Švýcarsko testuje přechod z Microsoft 365 na FOSS, konkrétně balík openDesk (Wikipedie) od německé státní společnosti ZenDiS (Wikipedie), s cílem posílit digitální suverenitu.
V italském městě Pordenone probíhá LibreOffice Conference 2026. Zúčastnit se lze i online.
Svobodný (GPLv3) šachový engine Stockfish (Wikipedie) byl vydán ve verzi 19 (𝕏). Přehled novinek v příspěvku na blogu. Stockfish 19 je o 44 Elo silnější než Stockfish 18.
Byla vydána nová verze 1.13.0 dynamického programovacího jazyka Julia (Wikipedie) určeného zejména pro vědecké výpočty. Přehled novinek v příspěvku na blogu a v poznámkách k vydání. Aktualizována byla také dokumentace.
Organizátoři konference LinuxDays zveřejnili program letošního ročníku a spustili registraci návštěvníků. LinuxDays 2026 se uskuteční 3. a 4. října v areálu ČVUT v pražských Dejvicích, na Fakultě informačních technologií. Těšit se můžete na 70 přednášek a workshopů od 66 přednášejících. Konference bude rozdělena do pěti sálů s různou kapacitou. Vstup na LinuxDays je jako obvykle zdarma, stačí včas vyplnit registrační formulář. Opět je možné si na akci zakoupit oběd, ale je třeba to udělat předem, na místě už to nebude možné.
Google Chrome 153 byl prohlášen za stabilní. Nejnovější stabilní verze 153.0.8010.36 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 230 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Open-source hra Shattered Pixel Dungeon (Wikipedie) byla vydána ve verzi 4.0.0. Přehled novinek v příspěvku na blogu.
Apple dnes představil (YouTube) iPhone Duo, iPhone 18 Pro, Watch Series 12, Watch Ultra 4 a AirPods 5.
Společnost System76 představila pracovní stanici Thelio Mira AI s předinstalovaným Pop!_OS s prostředím COSMIC nebo Ubuntu. Nakonfigurovat lze až s 16jádrovým CPU AMD Ryzen 9 9950X, 192 GB DDR5 RAM, dvěma GPU NVIDIA RTX Pro 6000 a 192 GB GPU pamětí.
DigitalOcean je sponzorem nadace Omacom Foundation stojící za linuxovou distribucí Omarchy. Přislíbená částka je 3 miliony dolarů, tj. 1 milion dolarů ročně po dobu tří let.
SELECT ENCRYPT('nějaké-heslo') vrátí asi takovýto řetězec: MeXkFnYUhP7cw
Jakou funkcí v PHP dosáhnu stejného výsledku ? Koukal jsem na mcrypt, crypt, ale stejně jsem nenašel tu správnou
Díky za radu.
password().
encrypt() v MySQL je definovaná dost vágně na to, aby mohla být implementována někde jinde ještě jednou a bylo zaručeno, že obě implementace budou vracet vždy stejné výsledky.
SELECT * FROM .... WHERE ...
uděláš SELECT *, password = ENCRYPT(vstupoduzivatle) as spravneheslo FROM ... WHERE ...
a je to. Nevidim kde je problém.
Nebo taky
SELECT * FROM ... WHERE password = ENCRYPT(vstupoduzivatle) AND ...
podle toho, na co to potřebuejš...
encrypt() i druhý parametr. Nějak se na něj zapomíná.
Jinak je samozřejmě nesmysl tahat zašifrované heslo z databáze a snažit se ho porovnávat v PHP. Na to máme SQL.
SELECT encrypt('heslo');
Pokaždé to vygeneruje něco jiného. První 2 znaky jsou použitá sůl. Když výsledek uložíš do sloupce např. password, tak pro ověření stačí:
SELECT encrypt('heslo',password)=password;
Z uloženého hesla password použije jen první 2 znaky.
encrypt() bere z šifrovaného řetězce jen prvních 8 znaků, zbytek ignoruje. Možná proto je místo ní doporučena funkce password(), která bere v potaz všechny znaky.
// overime existenci mailove schranky
if ($db->query("SELECT email FROM users WHERE email = '$_REQUEST[email]'")->num_rows) {
// overime spravnost zadaneho hesla, bohuzel musime primo imap pripojenim, protoze funkce encrypt v MySQL vraci pokazde jiny retezec
if ($mbox = @imap_open("{127.0.0.1:143/notls}", $_REQUEST['email'], $_REQUEST['old-password'])) {
...
Abyste chápali čeho jsem chtěl dosáhnout - chtěl jsem umožnit uživatelům měnit heslo do jejich schránky.
SELECT (ENCRYPT('ahoj','AB'));
Dá vždy stejný výsledek.ENCRYPT('ahoj','TG'); (respektive jako ENCRYPT('ahoj'), kde se náhodně vygenerovalo to 'TG')
SELECT CASE WHEN 'TGlcRH68Dkg3g' = ENCRYPT('ahoj',SUBSTRING('TGlcRH68Dkg3g',1,2)) THEN
'rovna se to'
ELSE
'NErovna se to' END AS result;
Prostě si musíte vzít ty první dva znaky z uloženého encrypt-ovaného řetězce a použít je jako salt.ENCRYPT() - ba naopak
.
encrypt('heslo',password)=password
Jako druhý parametr dáš to šifrované heslo v databázi.
ENCRYPT() bere jen tolik znaků kolik potřebuje, takže ten SUBSTRING() co jsem psal výše, je naprosto zbytečný až špatný.
if ($db->query("SELECT email FROM users WHERE email = '$_REQUEST[email]'")->num_rows) {
$_REQUEST[] je protažen mysql_escape_stringem
Jen to prostě ukazuje na to, že používáte něco, s čím neumíte zacházet. A to prostě není dobře, protože jednou vyrobíte prasečinu, která už nevinná nebude.
Fajn, řekněme - smyšelný příklad - že najezdím ročně kolem 200 tisíc kilometrů (jakožto zahraniční řidič tahače), osobní auto umím řídit i se zavázanýma očima a mám za tu dobu za sebou jednu nehodu, kterou jsem nezpůsobil.
Vy najezdíte jakožto běžný motorista ročně kolem 15ti tisíc a máte za sebou třeba 2 zbořená auta vlastní vinou.
Jsem oprávněn Vám říkat, že používáte něco s čím neumíte zacházet a to prostě není dobře, protože jednou někoho zabijete a to už tak nevinné jako sešrotovaná auta nebude ? Je to cesta do pekel.
mysql_escape_stringem odpovídá mému požadavku a jeho formát není nikterak pozměněn.
Mě to naopak připadá jako zbytečné plácání proměnnými. Pokud vám jde čistě jen o modifikaci hodnot v gobálním poli, tak můžu samotnou fci escape_stringu přesunout s klidem do složené části SQL dotazu, kdy se nic modifikovat a znovu přiřazovat nebude.
Ale tohle, jsou jen detaily u tak jednoduché části kódu, jako je ten, který jsem napsal. Modifikace hodnot v globálním poli je možná trošku prasečina a možná se to ani nemá, ale v mém případě použití to nehraje roli.
SELECT * FROM tabulka;", který nacházím i v komerčních aplikacích. Prostě si to někdo zjednodušil a pak už se k danému kódu nevrátil, protože mu připadal OK. Chybu to nezpůsobí hned a nemusí to způsobit nikdy, ale udržovatelnosti programu to neprospěje. Ovšem je to mnohem menší zlo, než modifikace superglobálních polí.
mysql_escape_string k přepsání hodnoty pole z požadavku je první polovina vytvoření SQL injection. Pak se vám někde stane, že tu hodnotu escapujete dvakrát, jako opravu to escapování zrušíte a tam, kde se to escapovalo správně jednou, máte vyrobené SQL injection. Mnohem lepší je vyhnout se přepisování parametrů požadavku, vyhnout se i mysql_escape_string a použít parametrizované dotazy.
Tiskni
Sdílej: