WebJET novinky 7/2020

23.07.2020
Nová verze WebJET 8.7 zlepšuje šifrování formulářů, bezpečnost a obsahuje mnoho úprav "pod kapotou".

Úpravy v editoru stránek

Jako vždy začínáme s úpravami v editoru stránek, které považujeme za nejzajímavější pro většinu z vás.

Kromě menších změn jsme vylepšili původní možnost synchronizace jména adresáře a hlavní web stránky adresáře:

  • Web stránky - přidána nová konfigurační proměnná syncGroupAndWebpageTitle (výchozí true) zabezpečující synchronizaci jména adresáře a hlavní stránky adresáře. Původně byla tato funkce spojena s konfigurační proměnnou groupCreateBlankWebpageAfterCreate, což nebylo vždy vyhovující.

 

Další úpravy editoru

  • Editor - fotobanka - zvětšená šířka obrázků z fotobanky na 1280 bodů pro lepší použití v bannerech.
  • Editor - přidána možnost kliknutím na ikonu zvětšit pole HTML kód do hlavičky pro možnost zápisu velkého HTML / JavaScript kódu.
     
  • Web stránky - adresář - přidána možnost adresáře nastavit checkbox "Vynutit zvolenou šablonu adresáře při zobrazení stránky", kdy se při zobrazení stránky z tohoto adresáře použije nastavená šablona adresáře bez ohledu na aktuální šablonu stránky. Umožní to mít například při uložení web stránky do více adresářů (multikategorie) stránky s různými šablonami.
  • Web stránky - Multigroup - při smazání stránky se smaže i reference z multi skupin (jestliže je web stránka umístěna ve více adresářích).
  • Web stránky / Adresář - Opravené časování změn publikování adresáře.
  • Web stránky - upravené autocomplete při psaní URL adresy do pole docId / adresa tak, že pro multidomain WebJET se zobrazí pouze URL adresy aktuální domény.
     
  • Web stránky - opravena změna pořadí s využitím drag & drop při webu ve více adresářích (multikategórie). Pořadí se nastaví jen stránce v aktuálním adresáři (ne všem kopiím).
  • Klonování struktury - opraveno nastavení data pro přiložené média k webu (datum se nenastavil a tím pádem se naklonované média nezobrazovaly).
  • Navigační lišta (breadcrumb) - opraveny zdvojené lomítka v URL adrese stránky končící na znak *.
  • PageBuilder - upravená cesta pro získání bloků na / templates / ADRESÁR_SKUPINY_ŠABLÓN / PageBuilder /, přidání podadresáře podle nastavené konfigurační proměnné installName nebo logInstallName se děje automaticky.
  • Page builder - přidány standardní sloupcové bloky.
     
  • Šablony - doplněné automatické dohledávání souborů v / templates / adresáři stejně jako pro / components / adresář, včetně možnosti hledání podle logInstallName.

 

Aplikace

GDPR

Udělali jsme několik vylepšení v aplikaci GDPR:

  • Přidána možnost nastavení počtu dní na smazání emailů přes konfigurační proměnnou gdprDeleteEmailsAfterDays (dosud se mazaly všechny emaily), upravené na mazání jen neodeslaných emailů (aby se náhodou nesmazal email, který se zatím nepodařilo odeslat kvůli chybě SMTP serveru).
  • Upravené načítání dat - seznam používaných cookies a jejich popis se načte až při zobrazení detailu, zbytečně se tak negeneruje do HTML kódu a stránka má menší velikost.

Další změny v aplikacích

  • AB Testování - vypnuta možnost zobrazení B verze stránky, pokud je smazána, ale stále v koši (B verze se již nebude zobrazovat, stránka bude považována za neplatnou).
  • AB Testování - vypnuto vkládání B verze do mapy stránek (B verze se nezobrazí v mapě stránek).
  • Archiv souborů - opraveno vyhledávání archivovaných verzi souborů (zobrazení korektního jména a názvu souboru).
  • Číselníky - upravený import numerické hodnoty z excelu (akceptování mezery v čísle / formátovaného čísla).
  • E-shop - přidána možnost použití ceny podle první spárované skupiny uživatelů (když je cena zadaná ve formě cena; idskupiny: cena2; idskupiny2: cena3) namísto minimální ceny (když je například maloobchodní cena z nějakého důvodu nižší než standardní velkoobchodní). Režim se zapne nastavením konfigurační proměnné basketUseFirstUserGroupPrice na true.
  • Export dat - opravena editace záznamu, opravené nastavení velikosti stránky.
  • Formuláře - přidána možnost vypnout checkform (vestavěnou kontrolu vyplnění polí) na celém formuláři přidáním CSS třídy noCheckForm na form tagu.
  • Formuláře - přidáno lépe generování label pole pro radio buttony - pokud název pole končí na _rb tak do generovaného emailu se jako label hodnota použije label pro pole bez _rb na konci (čili pro popis).
  • Formuláře - opravena archivace formulářů (přesun formuláře do archivu, kdy se nekorektně vytvořil řídící řádek se seznamem sloupců).
  • Formuláře - upravená velikost pole textarea v emailu (zobrazeno podle textu, původní verze zobrazila pole jako jednořádkové).
  • Formuláře - přidána podpora vkládání více souborů k formuláři přes atribut multiple = "multiple" v input poli pro formuláře (<input type="file" name="file" multiple="multiple"/>).
  • Galerie - photoSwipe - upravená linka ke stažení originálu obrázku tak, aby vrátila skutečný _O_ obrázek.
  • Galerie - stránkování se nezobrazí pokud galerie obsahuje méně obrázků než je nastavená velikost jedné stránky.
  • Mapa - přidána podpora vkládání OpenStreetMap do bootstrap dialogu (reinicializace velikosti mapy po otevření dialogu).
  • Navigační lišta (breadcrumb) - upravený Navbar separátor ze znaku > na &gt; aby byl generován korektní HTML kód (konfigurační proměnná navbarSeparator).
  • Navigační lišta (breadcrumb) - schema.org - pro verzi Navbar schema.org již není mezi LI elementy generovaný kód nastavený v konfigurační proměnné navbarSeparator (způsobovalo to nevalidnosť HTML kódu). V případě potřeby zobrazení oddělovačů mezi elementy je třeba použít CSS: after nebo: before elementy.
  • Navigační lišta (breadcrumb) - upravené generování navigační lišty ve formátu schema.org - doplněn chybějící element "span itemprop = name" kolem názvu stránky.
  • Novinky - přidána možnost nastavení perex skupin pro filtrování URL parametrům. V parametru requestPerexGroupsName je třeba zadat jméno parametru, ve kterém budou odeslány ID Perex skupin. Takto se neovlivňují jednotlivé news komponenty navzájem.
  • Přesměrování - přidána podpora nastavení časování přesměrováni do budoucna (podle data a času), pro funkčnost vyžaduje nastavení CRON úlohy sk.iway.iwcm.systém.UrlRedirectDB, která maže cachované záznamy po změně data.
     
  • Rezervace - opraveno kliknutí na tužku v seznamu rezervačních objektů.
  • Statistika - opraveno nastavení ID adresáře při statistice Odkud přišli pro filtrlovanie podle adresáře.
  • Vyhledávání - po zapnutí konfigurační proměnné fulltextIncludeKeywords na true se do indexu pro vyhledávání přidávají i klíčová slova (názvy perex skupin). Skupinám začínajícím na znak #, @, _ se odstraní první znak, aby se lépe daly vyhledávat jako slovo.

 

Zlepšení výkonu

  • 404 stránka - limit, pro který se začne zobrazovat zjednodušená 404 stránka, je možné nastavit přes konfigurační proměnnou spamProtectionHourlyLimit-404. Hodnota se použije, jestliže je větší než 150.
  • Monitorování / výkon / databáze - přidána možnost odeslat notifikační email při výskytu chyby zaplněného databázového poolu (nedostatek databázových spojení). Email adresa pro takový případ se nastavuje v konfigurační proměnné dbPooleErrorTimeoutNotificationEmail.
  • Novinky - odstraněna interní cache seznamu novinek, protože klíč nereflektoval na všechny filtrovací možnosti. Místo toho se používá standardní cache přes parametr komponenty cacheMinutes.
  • Range Request - opraveno přehrávání video souborů (mp4) na iPhone s využitím DB storage / využití externího adresáře (iOS vyžaduje podporu range requestu při přehrávání multimédií).
  • Optimalizovaná rychlost startu WebJETu: optimalizovaná rychlost aktualizace databáze (načte se předem kompletní seznam již provedených SQL příkazů), optimalizovaná rychlost načítání konfigurace (načte se předem celý seznam z conf tabulky), optimalizovaná rychlost inicializace PkeyGeneratora (ověření max hodnoty v DB tabulce se provede až při prvním volání getNextValue).
  • Web stránky - editace adresáře - opraveno nastavení práv na podadresáře po zatržení možnosti Nastavit práva i stávajícím podadresářem (práva se nastavily, ale cache se neobnovila).

 

Bezpečnostní vylepšení

Provedli jsme další bezpečnostní testy. Největší novinkou je ochrana formulářů v administraci pomocí CSRF tokenů.

  • Přidaná ochrana struts formulářů v administraci přes CSRF tokeny. Pokud je vytvořen formulář manuálně je třeba do něj přidat skryté (hidden) pole: <% = org.apache.struts.taglib.html.FormTag.renderToken (session)%>.
  • Výjimky URL, pro které se kontrola nemá provádět, je možné definovat v konfigurační proměnné xssProtectionStrictPostUrlException.

Další zásadní změna je zapnutí XSS ochrany i na databázových JPA entitách. Pokud se vám po aktualizaci začne na některých místech zobrazovat HTML kód namísto formátovaného textu, zkontrolujte Java kód používaných JPA entit.

  • Bezpečnost - zapnuta XSS ochrana i na JPA entitách. Sloupce, které mohou obsahovat HTML kód, je třeba anotovat @ javax.persistence.Convert (converter = AllowHtmlAttributeConverter.class).

Ve verzi WebJET 8.7 jsme sladili přihlašování mezi WebJETem a Spring REST službami. Nemělo by tedy docházet k rozdílům v přihlášení do web stránky a při volání REST služeb.

  • REST - opravena kontrola práv pro REST volání pokud nenastalo přihlášení do / admin části (až tehdy se inicializován korektní spring security context).

Přidali jsme i možnost nastavit http hlavičku Feature-Policy:

  • Bezpečnost - přidána možnost nastavit http hlavičku Feature-Policy (např .: microphone 'none'; Geolocation 'none')

Přidali jsme možnost definovat IP adresy, pro které se nebudou aplikovat limity SPAM ochrany:

  • Spam ochrana - přidána možnost vypnout limity spam ochrany (počet odeslání / timeout mezi odesláním) pro definované IP adresy v konfigurační proměnné spamProtectionDisabledIPs.

Přidali jsme možnost nastavovat http hlavičky podle URL prefixu:

  • Bezpečnost - přidána možnost nastavovat http hlavičky podle URL prefixu. Nastavují se v konfigurační proměnné responseHeaders ve formátu url-prefix: meno_hlavičky: hodnota, každý záznam na novém řádku.

Šifrování dat

Vylepšili jsme šifrování dat použitím hybridního šifrování. To umožňuje šifrovat data déle než je délka klíče.

  • Formuláře - přechod na hybridní šifrování s možností šifrování dlouhých textů.
  • Upravené GUI pro generování klíčů a jejich zadávání.
     

Další bezpečnostní změny

  • 404 - opraveno zobrazení web stránek začínajících na / lib prefix.
  • Freemarker - přidána kontrola volání .ftl souborů (Freemarker šablony) z adresáře / components. Soubory se zobrazí pouze když jsou přidány jako výjimka v konf. proměnné componentsDirectCallExceptions stejně jako volání JSP souborů.
  • Konfigurace - přidána kontrola znaků názvu konfigurační proměnné, aby se nestalo, že při copy & paste se před / za název konfigurační proměnné dostanou neviditelné znaky (například tabulátor) a proměnná se nenastaví správně (i když vizuálně ji vidět jako nastavenou).
  • Kontrola IP adres - upravená kontrola IP adres přes volání Tools.checkIpAccess. Prázdná hodnota je povolena pouze pro webEnabledIPs a adminEnabledIPs, pro ostatní se vyžaduje znak * pro povolení neobmedzného přístupu (zamezuje povolení přístupu v případě překlepu v názvu konfigurační proměnné).
  • Opravena zranitelnost při deserializaci Java objektů. Seznam povolených Java tříd, které lze deserializovať je v konfigurační proměnné XMLDecoderAllowedClasses.
  • Přesměrování - opraveno přesměrování, pokud URL adresa obsahuje dvojité lomítko (už to nechytá Spring filtr, ale přejde do WebJETu, kde se provede přesměrování).
  • Přesměrování domén - opravena změna hodnoty cílové domény v multiweb prostředí, pokud cílová doména byla zadána is http prefixem (starší verze nevěděla korektně určit doménu a tudíž ji přepsala).
  • Přidáno automatické nahrazení únikových značek HTML kódu (značky značky < a >) pro JPA entity. Pro atribut, který může obsahovat HTML kód, je třeba použít anotaci @ javax.persistence.Convert (converter = AllowHtmlAttributeConverter.class). Nebude tak možné provést útok typu XSS podvržené JavaScript / HTML kódu.
  • Spam ochrana / CSRF - vypnutá kontrola CSRF při vypnuté spam ochraně.
  • Soubory - přidána kontrola speciálních znaků při přejmenování adresáře v souboru.
  • Swagger - upravené zobrazení Swagger dokumentace pouze pokud je nastavena konfigurační proměnná swaggerEnabled na true (výchozí false). Swagger dokumentace se zobrazí pouze pro přihlášeného administrátora, veřejné zobrazení lze zapnout nastavením konfigurační proměnné swaggerRequireAdmin na false (nedoporučujeme).
  • ZIP - opravena zranitelnost při dekomprimaci Unzip archívu (možnost zápisu mimo povoleného adresáře).

 

Systémové změny

Připravujeme se na přechod na Java verzi 11. Ověřili jsme praktickou možnost běhu WebJETu s využitím OpenJDK 11. Vyžaduje to doplnění chybějících knihoven (jelikož ve verzi 11 odstranili starší API).

  • Java 11 - příprava pro běh s OpenJDK 11. Ve / WEB-INF / lib-java11 jsou knihovny, které je třeba nakopírovat do / WEB-INF / lib adresáře a readme.md soubor s popisem dalších potřebných úprav.

Vizuální úpravy

Udělali jsme několik vizuálních úprav pro zlepšení použitelnosti WebJET CMS:

  • Editor - opraveno zobrazení na hi-dpi (4k) monitorech (zobrazení správných ikon v editoru).
  • PageBuilder - přidána možnost nastavení počtu bootstrap sloupců, nastavuje se konfigurační proměnnou bootstrapColumns, výchozím nastaveny na 12.
  • Uživatelé - opraveno uspořádání uživatelů podle datumových sloupců.

Další systémové změny

  • Aktualizace - doplněné aktualizaci adresářů v / components i podle konfigurační proměnné logInstallName (pokud daný adresář aktualizační soubor obsahuje).
  • Diskuse - refaktorovaný kód posílání notifkácií po přidání příspěvku / schvalování. Přes request objekt forumNotifyMessageKey lze nastavit jméno klíče, který se má použít jako text oznámení. Ten obsahuje parametry: link na stránku {1}, titulek stránky {2}, text stránky {3}, jméno autora příspěvku {4}, text příspěvku {5}.
  • Editor - poznámka - opraveno ukládání poznámky v editoru na MS SQL databázi.
  • Email - při neúspěšném odeslání emailu se  uloží do databáze pro  pozdější odeslání.
  • Formuláře - upravené odesílání emailu pro návštěvníka, pokud není správně zadána email verze formuláře (neobsahuje vstupní pole). Pro takový případ se nespárované hodnota emailu návštěvníka a email se neodeslal.
  • Galerie - opraveno získání velikosti obrázku při multidomain souborech.
  • Google Analytics - přidána možnost posílání zápisů do Google Analytics z backendu. Umožňuje sledovat v GA i stahování souborů. Nastavuje se v konfiguračních proměnných analyticsTrackerConf, analyticsTrackingId, analyticsTrackingVersion, dokumentace je na docs.webjetcms.sk v sekci backend.
  • JarPackaging - opravena detekce JAR souborů na Windows platformě, přidáno 403.jsp, 404.jsp a 500.jsp do components Jaru.
  • Multiweb - opraveno zobrazení menu Soubory, pokud má admin nastaveny práva jen do podadresářů (např. / Images / gallery).
  • Multiweb - opraveno ukládání atributů formulářů a jejich zobrazení podle ID domény.
  • Ninja - opraveno hledání kofiguračného souboru (např. Default og image).
  • Novinky - opraveno zobrazení novinek při nastaveném offsetu a velikosti stránky při použití databáze MariaDB.
  • Novinky - přidána možnost vyhledávání podle URL parametru workPosition, který se vyhledává jako perex skupina s názvem $ workPosition.
  • Novinky - filtrování podle perex skupiny (přes URL parametr tag) upravené tak, že pokud perex skupina obsahuje znak |, tak se porovnává pouze hodnota po znak |. Umožňuje to mít zkrácené názvy skupin s kódy v URL parametrech namísto celých názvů perex skupin v URL.
  • Page Builder - přidána možnost nastavení vlastního formátu gridu (jména HTML tagů a CSS selektorů jednotlivých bloků) přes konfigurační proměnnou pageBuilderGrid.
  • Překladové texty - opraveno načítání změněných textů v clusterových prostředí.
  • Překladové texty - přidána možnost získání překladových textů podle aktuální domény. Funguje stejně jako získání konfigurační proměnné - zapnutím konfigurační proměnné constantsAliasSearch. Prefix je doména.sk / domenovyalias-textový.kľúč. Můžete tak měnit texty v aplikacích podle domén.
  • Spring - upravená inicializace zákaznických SpringConfig tříd - inicializují se jako seznam, tím pádem se navzájem nepřepisují.

Upravené verze knihoven

  • collections-generic-4.01 - odstraněn package org.apache.commons.collections15, náhrada je org.apache.commons.collections4
  • JPA - aktualizovaná knihovna eclipselink.jar na verzi 2.7.4.

 

Příprava pro WebJet 9

Z důvodu přechodu na  WebJET CMS verzi 9, jsme museli ve zdrojovém kódu provést řadu změn. Verze 9 se nese ve znamení "změn pod kapotou" jak to označuje společnost Apple. Ty navenek nejsou vidět, ale umožní nám jednodušší přechod na novou verzi. Snažíme se odstranit staré technologie tak, aby WebJET verze 9 byla moderní nejen z vizuálního směru, ale také z toho na pozadí.

  • API - upravené objekty DocDetails, GroupDetails, TemplateDetails, TemplateGroupBean pro podporu datatabuliek.
  • Datatabulky - přidána možnost komentovaný Java Bean pro datatabulku.
  • Editor - opraveno zobrazení editoru voláním editor.do (např. Ze šablon), refaktoring kódu, zrušení staré struts třídy, přemapování na Spring.
  • Přesměrování - upravené API UrlRedirectBean pro podporu Spring DATA repozitáři.
  • Skupiny šablon - upravené pro podporu Spring DATA repozitářů použitím Long jako primárního klíče. POZOR: request objekt templates_group_id je nyní typu Long, namísto původního Integer.