V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 13.0 (Mastodon). Forgejo je fork Gitei.
Společnost Eclypsium se na svém blogu rozepsala o bezpečnostním problému počítačů Framework. Jedná se o zranitelnost v UEFI umožňující útočníkům obejít Secure Boot.
Editor kódů Zed (Wikipedie) po macOS a Linuxu s verzí 0.208.4 už běží také ve Windows.
Apple dnes představil 14palcový MacBook Pro, iPad Pro a Apple Vision Pro s novým čipem M5.
Debian pro mobilní zařízení Mobian (Wikipedie) byl vydán ve verzi 13 Trixie. Nová stabilní verze je k dispozici pro PINE64 PinePhone, PinePhone Pro a PineTab, Purism Librem 5, Google Pixel 3a a 3a XL, OnePlus 6 a 6T a Xiaomi Pocophone F1.
Operátor O2 představil tarif Datamanie 1200 GB . Nový tarif přináší 1200 GB dat s neomezenou 5G rychlostí, a také možnost neomezeného volání do všech sítí za 15 Kč na den. Při roční variantě předplatného zákazníci získají po provedení jednorázové platby celou porci dat najednou a mohou je bezstarostně čerpat kdykoli během roku. Do 13. listopadu jej O2 nabízí za zvýhodněných 2 988 Kč. Při průměrné spotřebě tak 100 GB dat vychází na 249 Kč měsíčně.
Byly publikovány informace o útoku na zařízení s Androidem pojmenovaném Pixnapping Attack (CVE-2025-48561). Aplikace může číst citlivá data zobrazovaná jinou aplikací. V demonstračním videu aplikace čte 2FA kódy z Google Authenticatoru.
Free Software Foundation (FSF) spustila projekt Librephone, jehož cílem je vytvoření svobodného operačního systému pro mobilní telefony. Bez binárních blobů.
Byla vydána verze 7 s kódovým název Gigi linuxové distribuce LMDE (Linux Mint Debian Edition). Podrobnosti v poznámkách k vydání. Linux Mint vychází z Ubuntu. LMDE je postaveno na Debianu.
Byl vydán Mozilla Firefox 144.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze lepší správu profilů. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 144 bude brzy k dispozici také na Flathubu a Snapcraftu.
$from ='05/17/2012 10:15:00'; $to ='05/17/2012 10:30:00'; $day ='5/17/2012'; echo '{ "dtstart": "'.$from.'", "dtend": "'.$to.'", "day": "'.$day.'" },';tak to fičí ok, ale akonáhle pred to dám hocijakú funkciu, tak to ajax nespracuje, napr. toto (prepíšem na konci tie isté premenné čo v prvom skripte, ale aj tak to nejde dobre):
$from= preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->time_from); $to = preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->time_to); $day = preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->day); $from ='05/17/2012 10:15:00'; $to ='05/17/2012 10:30:00'; $day ='5/17/2012'; echo '{ "dtstart": "'.$from.'", "dtend": "'.$to.'", "day": "'.$day.'" },';
$data
$from, $to, $date
by se mely stejne priradit rucne definovane hodnoty, takze problem bude spise v tom, ze tam dojde k nejake notice/warning nebo tak neco, co pak rozbije ten vystup..
Array( [0] => array ( [id] => 24 [time_from] => 05/17/2012 10:15:00 [time_to] => 05/17/2012 11:30:00 [day] => 05/17/2012 ) )
<?php class Data{ public $time_from = '05/17/2012 10:15:00'; public $time_to ='05/17/2012 10:30:00'; public $day ='05/17/2012'; }; $data = Array(0 => new Data()); $from= preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->time_from); $to = preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->time_to); $day = preg_replace('/[\x00-\x1F\x80-\xFF]/', '',$data[0]->day); echo '{ "dtstart": "'.$from.'", "dtend": "'.$to.'", "day": "'.$day.'" },';jako byste přímo zapsal toto:
,
na konci toho výpisu. Zkusil bych ji dát pryč, co to udělá.
Array( [0] => stdClass Object ( [id] => 24 [time_from] => 05/17/2012 10:15:00 [time_to] => 05/17/2012 11:30:00 [day] => 05/17/2012 ) )v čom by tam mohol byť do kelu problém?
echo json_encode(array("dtstart"=>$from,"dtend"=>$to,"day"=>$day));
eval()
, která si s těmi zpětnými lomítky hravě poradí.
json_encode()
přidává uvozovky, podstrčený kód se tedy předá jako řetězec.
{ "dtstart": "05/17/201210: 15: 00", "dtend": "05/17/201210: 30: 00", "day": "05/17/2012" }v pořádku. Že by zase nějaká JSON obskurnost?
<![CDATA[ … ]]>
json_encode()
si s tím musí umět poradit tak, abych při json_decode()
dostal identická data.
Když ukládám data do DB, tak je také nesmím escapovat, abych je měl v DB přesně byte po bytu tak, jak je tam potřebuji mít.
json_decode()
a pak htmlspecialchars()
. V HTML nemá JSON co pohledávat.
<script> <?php echo json_encode(array("dtstart"=>"<![CDATA[","dtend"=>"05/17/2012 10:15:00")); ?> </script>nebo
<script> <?php echo json_encode(array("dtstart"=>"<script>","dtend"=>"05/17/2012 10:15:00")); ?> </script>což mi rozbije výstup. Případně když budu vypisovat jinam (atribut, jiný formát), může se tam rozbít něco jiného. Proto je potřeba, aby escapoval ten, kdo ví*, kam se vypisuje. A tudíž je to polovičaté escapování ve funkci
json_encode()
nadbytečné a povede akorát ke zmatkům a chybám – stejně jako ty PHP Magic Quotes – programátoři se budou spoléhat na to, že můžou jen tak přilepit návratovou hodnotu funkce do výstupu a nebudou ji escapovat a špatně dopadnou.
Ta funkce má i volby – trochu by pomohla JSON_HEX_TAG
, která zneškodní ty < >, ale stále tam zbudou & a ty budou dělat neplechu (neexistující entity). Takže je potřeba přidat ještě JSON_HEX_AMP
. A už to není tak jednoduché a možná tam jsou i další díry…
Je to takový neunixový přístup, jedna funkce se toho snaží dělat příliš mnoho a nakonec to dělá blbě. Daleko lepší mi přijde to rozdělit – mít jednu spolehlivou funkci na generování JSONu a jinou spolehlivou funkci na escapování (pro různé výstupní formáty) a tyto dvě funkce zřetězit:
$výstup = bezpečněEscapujProDanýVýstupníFormát(generujNějakáData($vstup));*) což může být programátor, který zavolá patřičnou funkci, nebo třeba nějaký inteligentní šablonovací systém, který zná kontext.
<script> <?php echo htmlspecialchars(json_encode(array("dtstart"=>"&<![CDATA[","dtend"=>"05/17/2012 10:15:00"))); ?> </script>
bezpečněEscapujProDanýVýstupníFormát()
. Jenže pak je nějaké přidávání zpětného lomítka před / zbytečnost a nemá tam co dělat – akorát to někoho svede k chybě.
*) relativně – zase to zbytečně převádí " na ", přestože uvozovky v textových uzlech (uvnitř elementů) klidně být můžou a je potřeba je převádět jen v atributech – a to ještě jen v těch, kde je hodnota zavřená do uvozovek – zatímco v <element atribut='nějaká "hodnota" s uvozovkami'/>
klidně být můžou.
Tiskni
Sdílej: