Byly vyhlášeny výsledky letošní volby vedoucího projektu Debian (DPL, Wikipedie). Staronovým vedoucím zůstává Andreas Tille.
Jason Citron končí jako CEO Discordu. Od pondělí 28. dubna nastupuje nový CEO Humam Sakhnini, bývalý CSO Activision Blizzard.
Článek na Libre Arts představuje baskytarový multiefekt Anagram od společnosti Darkglass Electronics. S Linuxem uvnitř (licence, GitHub).
Městský soud v Praze vyhlásil rozsudek, který vyhověl žalobě novináře Jana Cibulky, který s podporou spolku IuRe (Iuridicum Remedium) požadoval omluvu od státu za to, že česká legislativa nařizuje operátorům uchovávat metadata o elektronické komunikaci. To je přitom v rozporu s právem. Stát se musí novináři omluvit a zaplatit náklady řízení. Především je ale součástí přelomové rozhodnutí o nelegálnosti shromažďování dat a o
… více »Americké technologické firmy Apple a Meta Platforms porušily pravidla na ochranu unijního trhu, uvedla včera Evropská komise (EK). Firmám proto vyměřila pokutu – Applu 500 milionů eur (12,5 miliardy Kč) a Metě 200 milionů eur (pět miliard Kč). Komise to oznámila v tiskové zprávě. Jde o první pokuty, které souvisejí s unijním nařízením o digitálních trzích (DMA). „Evropská komise zjistila, že Apple porušil povinnost vyplývající z nařízení
… více »Americká společnost OpenAI, která stojí za chatovacím robotem ChatGPT, by měla zájem o webový prohlížeč Chrome, pokud by jeho současný majitel, společnost Google, byl donucen ho prodat. Při slyšení u antimonopolního soudu ve Washingtonu to řekl šéf produktové divize ChatGPT Nick Turley.
Po roce vývoje od vydání verze 1.26.0 byla vydána nová stabilní verze 1.28.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.28.
Byla vydána nová verze 10.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 211 vývojářů. Provedeno bylo více než 2 800 commitů. Přehled úprav a nových vlastností v seznamu změn.
42 svobodných a otevřených projektů získalo finanční podporu od NLnet Foundation (Wikipedie).
Americký výrobce čipů Intel plánuje propustit více než 20 procent zaměstnanců. Cílem tohoto kroku je zjednodušit organizační strukturu ve firmě, která se potýká s problémy.
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 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)=passwordJako 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_string
em
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_string
em 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: