WebJET novinky 9/2019

16.09.2019
Nová verze WebJET 8.6 zlepšuje bezpečnost a obsahuje komponenty připravované pro WebJET verze 9.

Ú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.

Optimalizace pro vyhledávače

Z důvodu přípravy lepších textů pro vyhledávače, jsme editor stránek doplnili o nasledující funkce:

  • Varování při titulku delším než 60 znaků (Google doporučuje mít titulek stránky kratší než 60 znaků).
  • Přidali jsme možnost nastavit varovný text pro délku textu ve volném poli (použitém např. pro popis stránky). Varování může zobrazit doporučení na délku např. popisu stránky, ale zároveň umožní zadat delší text (když je to opodstatněné). Nastavuje se přes editaci textů jako možnost editor.field_X.type ve formě text-250, warningLength-80 - což znamená, že pole má max. délku 250 znaků a varování se zobrazí po zadání 80 znaků. Hlášení varovaní je možné změnit v překladovém klíči editor.field_X.warningText.
  • Doplněné generování noindex, nofollow (nastavené v konf. proměnné xRobotsTagUrls) pro sortování a generování XLS v tabulkách displaytagu (aby se zbytečně neindexovalo sortování tabulek).

Podpora pro SVG obrázky

Přidali jsme podporu vkládaní SVG obrázků přes /thumb servlet, když má img tag třídu fixedSize-w-h-ip. V takovém případě nemůže být obrázek prefixovaný adresou /thumb, ale ponechá se URL  SVG obrázku a nastavené w a h z CSS třídy fixedSize se nastaví do polí šířka a výška obrázku.

Pro případ chybného vložení jsme upravili /thumb servlet - když se požaduje zobrazit jiný soubor než typu jpg, png, gif a bmp, tak původní verze posílala chybu 404 (soubor nenalezen). Nová verze odešle přesměrování na adresu bez /thumb prefixu (čili na původní soubor).

Další úpravy editoru

  • Editor - upravená funkce odstranění formátování. Pro jednoduchost stačí kliknout kurzorem do textu, kde chcete odstranit formátovaní a kliknout na ikonu Odstranit formátování. Automaticky se odstraní formátování aktuálního elementu (např. odstavce) bez potřeby jeho přesného označování.
  • Editor - opravené zobrazení textarea elementu ve formuláři v editoru
  • Historie - opravené otevření editoru z historie změn web stránky otevřené přes ozubené kolečko v seznamu stránek
  • Hromadné operace - opravené duplikované vykonávání hromadné operace
  • Import/export - upravený import při přepsání hlavního adresáře. Zachovají sa základní údaje, jako rodičovský adresář, ID hlavní stránky adresáře, ID šablony, práva atd. (v tomto případě nedojde po importu k nechťenému přesunutí adresáře do původní lokace podle ID rodičovského adresáře).
  • ISVS - přidaná možnost nastavit pole Přehled (sumář) tabulky
  • ISVS - opravené zobrazení titulku "Odkaz se otevře v novém okně"
  • PageBuilder - přidaná podpora zapnutí PageBuilderu v inline editaci, když název šablony obsahuje výraz PageBuilder (např. Podstránka PageBuilder), nebo v šabloně v poli HTML kód je výraz PageBuilder (např. komentář <!-- PageBuilder -->)
  • Page Builder - upravené názvosloví CSS tříd na které se Page Builder aplikuje, viz dokumentace
  • Publikování stránky upravené tak, že se z historie smažou jen rozpracované verze aktuálně přihlášeného redaktora (ne všechny). Zamezí to nechtěnému smazání rozpracované verze stránky jiného redaktora.
  • Šablony - skupině šablon přidaná možnost nastavení editoru struktury (na výběr Page Builder nebo Grid Editor).
  • Šablony - skupiny šablon - přidaná možnost zobrazit vlastní formulář v další záložce editace skupiny šablon. WebJET hledá soubor, /components/INSTALL_NAME/admin/temps_group_properties.jsp který následně vloží do druhé záložky. V tomto formuláři je možné nastavovat vlastní parametry pro skupinu šablon (např. nastavení barev, loga a podobně).
  • Skupiny šablon - upravené zobrazení šablon v multiweb instalaci - zobrazí se jen skupina 1 (nepřiřazené) a skupiny šablon začínající na doménový alias. Při vytvoření nové skupiny šablon se do názvu automaticky doplní doménový alias.
  • Seznam stránek - přidaná možnost Nastavit jako hlavní stránku adresáře do vlastnosti stránky (v seznamu stránek po kliknutí na ozubené kolečko).
  • Seznam stránek - přidané lepší zobrazování chybové hlášky při práci ve stromové struktuře (např. když uživatel nemá práva na přesun adresáře do určitého uzlu).

Aplikace

GDPR

Z důvodu souladu s GRPD požadavky, jsme provedli několik úprav, a to primárně z důvodu sbírání cookies a zápisu statistik:

  • Doplněno testování povolených statistických cookies pro zápis standardní statistiky ve WebJETu. Dokud nejsou statistické cookies povoleny, nezapisuje se ani statistika. Je zapotřebí do stránky vložit modul GDPR pro potvrzení používání cookies, nebo nastavit konf. proměnné viz níže, které povolují zápis statistik
  • Cookie bar - upravené tlačítko Akceptovat na základní obrazovce. Po kliknutí na něj se povolí všechny typy cookies, po přechodu na Možnosti se povolí jen zvolené skupiny (pro jednoddušší akceptování všech cookies)
  • Teplotní mapa - doplněna kontrola povolení statistických cookies do modulu statistika->teplotní mapa
  • Vypnutí GDPR - přidána možnost vypnout kontrolu GDPR cookies nastavením konf. proměnné gdprAllowAllCookies na true (např.  v intranetu, kde nechcete mít na stránce GDPR cookies lištu a chcete zaznamenávat statistiku ve WebJETu)
  • Přidána možnost vkládat skripty ještě před schválením použití cookie (předvolený stav - akceptuj všechno) nastavením konf. proměnné gdprInsertAllScriptsBeforeAccept (předvolené - false)

AMP

Formát AMP (Accelerated Mobile Pages) umožňuje extrémně rychle poskytovat web stránky optimalizované pro zobrazení na mobilním telefonu. Do WebJETu jsme přidali podporu pro generování takových stránek, více se dozvíte na samostatném blog příspěvku Rychlé webové stránky s AMP.

  • Přidaná možnost přes BrowserDetector zapnout AMP verzi nastavením forceBrowserDetector=amp
  • Přidaná podpora generování AMP verze stránky, při které se upraví HTML kód stránky podle požadavků formátu AMP. Seznam sekcí, na které se AMP verzia aplikuje je v konf. proměnné ampObjects (standardní jen doc_data), když potřebujete, můžete aplikovat i na doc_header - hlavičku atd.). Pro AMP verzi se aktuálně upravuje IMG tag a odstraňují se script tagy, zbytek v HTML kodu je ponechaný (základní verze).

Mapa

Mapa - nová verze s využitím OpenStreetMap. Přes konf. proměnnou mapProvider je možné přepínat mezi OpenStreetMap a GoogleMap (ten ale vyžaduje zadaný API klíč v konf. proměnné googleMapsApiKey).

Tiskové zprávy/novinky

Přidali jsme nové možnosti vkládání značek do šablon novinek:

  • přidaná možnost zobrazení fotky autora, společně s možností použití předvolené fotky -  $doc.getAuthorPhoto('/templates/assets/images/avatar.png') - kde se obrázek /templates/assets/images/avatar.png použije, když autor novinky nemá nastavenou fotografii
  • Diskuzní příspěvky - přidaná možnost získat přímo fotku autora diskuzního příspěvku (jako $forum.getAuthorPhoto('/templates/assets/images/avatar.png') - přidaný objekt getAuthor, který vrací kompletní UserDetails objekt
  • Přidaný objekt dateTool (org.apache.velocity.tools.generic.DateTool) pro možnost nastavení formátování datumu (příklad použití: $dateTool.format('dd.MMM', $doc.publishStart) pro formátování typu 15.květen)
  • Přidaná možnost získání odkazu na hlavní stránku adresáře na objektu GroupDetails jako $group.getVirtualPath
  • Přidaný objekt totalCount s celkovým počtem novinek

Další úpravy novinek:

  • Novinky - přidané filtrování duplicit stránek i v rámci jednoho výpisu novinek (nejen mezi více aplikacemi novinky)
  • Novinky - přidaná možnost filtrování podle "autora" stránky zadaného přes perex skupinu @menoautora (kódovaného jako URL parametr). Je tedy zapotřebí vytvořit perex skupinu @menoPriezvisko a následně do URL adresy přidat parametr author=menoPriezvisko. V novinkách se zobrazí jen web stránky, které mají zadanou perex skupinu @menoPriezvisko. Propojení je takto přes perex skupiny z důvodu, že ne vždy je označený autor příspěvku shodný s redaktorem, který příspěvěk v CMS vytvořil.
  • Novinky - přidaná možnost běhu i na Microsoft SQL starší než 2012. V tomto případě je potřebné nastavit konf. proměnnou mssqlUseOldTopQuery na true. Nemusí být ale následně správně zobrazené stránkování/počet novinek na poslední straně, proto verzi MSSQL starší než 2012 nedoporučujeme používat.

Číselníky

Aplikaci číselníky jsme z důvodu jejího použití na velkém projektu postupně vylepšili o nasledující možnosti:

  • Z důvodu integrity existujících dat jsme upravili možnost mazání záznamu z číselníku. Fyzicky nedochází k smazání záznamu z číselníku, ale k označení záznamu jako neplatného. Nebude tak docházet k nedefinovaným stavům při existujících záznamech odkazujících se na číselník.
  • Zvýšená datová velikost řetězců na 1024 znaků (z původních 255)
  • Rozšířené na 10 sloupců pro řetězce, 4 číselné sloupce, 4 boolean sloupce a 4 datumové sloupce
  • Přidaná priorita uspořádání a odkaz na potomka

Další změny v aplikacich

  • AB Testování - opravená detekce B verze stránek při použití hvězdičkových URL adres.
  • Archív souborů - přidaná podpora do plno textového vyhledávání - pro případ souboru nalezeného v archívu souborů se použije pěkné jméno souboru zadané v archívu namísto přímého jména souboru
  • Archív souborů - přidané vytváření kategorií ve stromové struktuře
  • Archív souborů - přidaná podpora vytváření odkazů na archív ve volných polích. Typ pole (přes editaci textů, editor.field_X.type) je potřeba nastavit na hodnotu file_archiv_link_insert_new
  • Archív souborů - přidaná podpora vyhledávání v archívu podle jména souboru v dialogu vložení souboru do editoru
  • Archív souborů - výběr kategorie přepracovaný na výběrové pole (z původního textového pole)
  • Audio prehrávač - opravené nastavenie velikosti souboru potřebné pro iOS pro zobrazení délky mp3 souboru
  • Banner - opravený zápis statistik zobrazení (duplikovali se záznamy se zobrazením banneru ve dni)
  • Cookies lišta - doplněná možnost zadávat do nadpisu a textu i úvozovky
  • Cookies lišta - přidaná možnost zadat i HTML kód jako zobrazený text (např. s odkazem na další informace)
  • Formulář lehko - přidaná možnost psaní názvů a popisek přes wysiwyg editor (možnost nastavení základního formátování jako tučné písmo, kurzíva, barva). Při vytváření HTML kódu vstupních polí je potřebné použít {labelSanitized} na atributech id a name jednotlivých elementů (hodnota labelSanitized odstraní HTML kód z názvu).
  • Formulář lehko - přidaná možnost zadat úvodní (oslovení) a koncový (podpis) text pro zobrazení v emailu
  • Formulář lehko - vizuálně vylepšené (posunuté tlačítko odeslání napravo, doplněná ikona pro tooltip, doplněné vykonání JS kódu tooltipu)
  • Formuláře - upravené hledání bloku s chybovou zprávou pomocí CSS třídy .cs-error-ID/MENO-elementu. Stará verze hledala element .cs-error v rodičovském bloku, nová verze umožňuje mít chybovou zprávu i na jiném místě v HTML kódu.
  • Formuláře - upravené generování textové verze emailu - odstraněné duplicitní mezery na koncích řádků, doplněné odeslání jako textové verze i z clustru (když se e-mail odesílá z CMS nodu, už nebude multipart, ale jako čistý text).
  • Formuláře - přidaná možnost potvrzení vyplnění formuláře přes e-mail potvrzení (double opt-in). Dosáhnete tak potvrzení odeslání formuláře kliknutím na odkaz v e-mailu a tedy ověříte, že návštevník, který formulář vyplnil, zadal skutečně platnou e-mailovou adresu. Ve vlastnostech formulářů je potřebné zvolit možnost Vyžadovat potvrzení souhlasu e-mailem, vytvořit stránku s textem e-mailu a její doc-id nastavit do pole Doc ID notifikace pro uživatele a do této stránky i vložit odkaz na stránku, kde bude potvrzení souhlasu. Odkaz musí obsahovat parametry /potvrdenie-double-optin/?formId={FORM_ID}&optinhash={OPTIN_HASH}. Ve stránce s potvrzením souhlasu musí být vložená aplikace,která souhlas na základě parametrů v databázi potvrdí.
  • Formuláře - opravené nastavení první hodnoty v select boxu po resetu formuláře (nastaví se první možnost místo prázdné hodnoty)
  • Formuláře - opravené odesílání formulářů s přílohou na cluster prostředí (čeká se na doručení souboru na CMS nod)
  • Formuláře - přidaná možnost nastavit jméno a e-mail odesílatele, info e-mailu pro návštěvníka z formuláře globálně přes konfigurační proměnné formmailSendUserInfoSenderName a formmailSendUserInfoSenderEmail
  • Formuláře - přidaná nová možnost Vytisknout při formulářovém prvku Tlačítko
  • Formuláře - přidaná možnost volání JS funkce po odeslaní formuláře. Stačí nadefinovat JS funkci formAfterSend(), která se po úspešném odeslaní automaticky vyhledá a když existuje, vykoná se
  • Formuláře - přidaná možnost vkládání vyplněných parametrů z formuláře do notifikace pro uživatele (nastaveného přes parametr sendUserInfoDocId). Hodnoty sa zadávají jako !MENO_PARAMETRA! do HTML kódu děkovné stránky
  • Galerie - pretty photo - přidaná možnost zobrazení dlouhého popisu po kliknutí na fotografii
  • Galerie - opravené přenášení perex skupiny když je ve stránce více galerií (perex skupina se už použije jen v galerii, kde je nastavená).
  • Hromadný e-mail - opravené nastavení domény pro multidomain WebJET a případ CMS nodu v clustru - použije se název správné domény pro odeslání e-mailu (podle zařazení stránky ve struktuře)
  • Hromadný e-mail - přidaná výjimka přesměrování domény z http na https když se jedná o generování hromadného e-mailu
  • Hromadný e-mail - opravené spuštění mailingu po jeho zadaní (při volaní dotazu do DB docházelo k zaokrouhlování času, a ten se nepřenesl korektně a tím pádem se kampaň nespustila)
  • Dotazník (kvíz) - přidaná možnost zadávání obrázku k otázce. Zapne se nastavením konf. proměnné quizAdminShowImageUrl na true.
  • Otázky a odpovědi - zrušený nadpis z formuláře přidání otázky, je lepší mít ho přímo ve stránce, kde je aplikace vložená (dá se lépe upravit)
  • Uživatelé - přidaná možnost přepsat údaje uživatele při importu z Excel souboru (pro aktualizaci údajů)
  • Přesměrování - přidaná možnost vypnout automaticky vytvářené presměrování při změně URL stránky (např. v průběhu vývoje, kdy probíhá hodně změn ve struktuře). Stačí nastavit konf. proměnnou editorDisableAutomaticRedirect na true
  • Statistika - přidaná detekce Windows 10 a MacOS 10.8+, upravený název Macintosh na aktuální název macOS
  • Statistika - upravená detekce mobilních zařízení - přidaná možnost tablet a phone, které se detekují podle výrazů ipad-tablet-kindle/iphone a v případě android podle pod. výrazu mobile v HTTP hlavičce User-Agent. Zrušený historický typ pda.
  • Thumb servlet - přidaná možnost vypnout oblast zájmu přidáním parametru noip=true (tehdy se při generování thumb obrázku použije celá plocha bez ohledu na nastavený bod zájmu)
  • Thumb servlet - přidaná podpora generování PNG obrázků (doposud se PNG generovaly ve formátu JPG což způsobovalo problém v Internet Exploreri)
  • Thumb servlet - upravené generování názvu cache souboru aby obsahovalo i barvu pozadí (aby se korektně soubor přegeneroval po změně barvy pozadí)
  • Video - přidaná podpora vkládání Facebook video souborů do stránky. Jako adresu video souboru zadejte přímo adresu stránky na facebooku, která se vám zobrazuje při sledování videa

Zlepšení výkonu

  • Captcha - přidaná možnost inicializovat invisible captcha až po kliknutí do formuláře. Funkce je potřebná pro formulář vkládaný na každé stránce, (např. formulář v patičce, nebo skrytý formulář v dialog vrstvě), aby se zbytečne captcha neinicializovala když návštevník formulář nepoužije. Režim je předvoleně zapnutý, dá se vypnout nastavením konf. proměnné captchaLoadAfterFocus na false
  • Skripty - vypnuté cachovaní seznamu skriptů, když je přihlášený admin (aby se změny projevily hned)
  • Spring - přidaná možnost vypnutí hledání spring aplikací při zobrazení stránky nastavením konf. proměnné springEnableShowdoc na false (když máte jistotu, že se Spring aplikace nepoužívají, zvýší to výkon serveru)
  • Vyhledávání - upravený text Počet výsledků na Přibližný počet výsledků, když ten se může měnit podle kontroly existence souborů a kontrolovat to dopředu by mělo výrazný dopad na výkon vyhledávání (ani Google neudává přesný počet výsledků)
  • Vyhledávání - přidaná konf. proměnná fileIndexerNoDataFileExtension, kterou je možné nastavit seznam přípon slouborů, pro které se nebude indexovat obsah souboru (ale potřebujeme index např. kvůli statistice stažení). Ušetří sa tak místo v databázi a zlepší výkon.

Bezpečnostní vylepšení

Vykonali jsme bezpečnostní testy nejen standardně generovaných stránek, ale i zaheslovaných sekcí veřejného webu (včetně procesu přihlašování a editace profilu) a administrátorské sekce, kde jsme se zaměřili na kontrolu práv a možnosti zneužití po napadnutí např. XSS útokem. Odstranili jsme i staré a už nepoužívané soubory v /admin sekci.

V rámci kontroly práv v administraci jsme přidali možnost jednoduše kontrolovat práva na modul zápisem typu <iwcm:checkLogon perms="cmp_form"/>, které, když redaktor právo nemá, přesměruje na úvodní stránku.

Provedli jsme i aktualizaci knihovny jQuery na verzi 3.3.1 (z 1.12.4), jQuery UI a Bootstrap na aktuální verzi, knihovny Spring z 4.3.1 na 5.1.1. To má dopad na JPA Beany - je potřeba doplnit anotaci na datumové položky. Atributem typu @Column(name...) private Date modified; je potřeba přidat ještě anotaci @Temporal(TemporalType.TIMESTAMP). Aktualizovali jsme i knihovnu javax.persistence API z 2.0 na 2.2 a verzi knihovny JPA na 2.7.3.

Důležitá je i zvýšená ochrana proti XSS útokům - data čtené z databáze jsou automaticky filtrované, aby nebylo možné vkládat HTML kód do stránky. Seznam výjimek (databázových sloupců, které můžou obsahovať HTML kód) se nastavuje v konf. proměnné xssHtmlAllowedFields.

Přidali jsme i ochranu před potencionálně citlivými údaji ponechanými na obrazovce. Často se vám stane, že máte otevřenou administraci ve více složkách a v jedné z nich se odhlásíte. Na ostatních záložkách ale můžou zůstat citlivé informace. Přidali jsme přesměrování na přihlašovací obrazovku po zrušení session. Přesměrování na úvodní stránku nastane 5 minut po zrušení session (abyste mohli, v případě potřeby, zkopírovat rozpracované údaje).

Kontrola refeRer hlavičky

Z důvodu ochrany vykonávání operací ve WebJETu vložením kódu do cizí stránky (útok typu CSRF), jsme přidali kontrolu referer hlavičky (obsahuje adresu stránky, ze které se vykonává překlik na aktuální stránku) i pro standardní web stránky. Hlavička referer se kontroluje při vykonání HTTP POST nebo pro všechny HTTP požadavky na URL, končící na .do nebo .action.

Je možné nastavit následující výjimky (konf. proměnné):

  • xsrfUrlException - seznam URL adres pro které se ochrana nepoužije
  • xsrfParamNameException - ochrana se vykoná jen když HTTP požadavek obsahuje nějaké parametry, přičemž v konf. proměnné je možné definovat seznam parametrů, které se přeskakují (systémově jsou definované parametry jako docid, forward atd.)
  • xsrfReferers - výjimka se dá nastavit i na referer domény v konf. proměnné, kde je předvolená přidaná doména seznam.cz a google (aby fungovaly odkazy z vyhledávačů)

Bezpečnost hesel

Na základě penetračních testů jsme jako ochranu před možným kompromitováním konta, přidali povinnost zadat staré heslo pri editaci profilu (na veřejné zóně). Po nasazení verze 8.6 je potřebné upravit custom registrační formuláře (pokud takové ve WebJETu máte) a doplnit pole pro zadání původního hesla (viz /components/user/newuser.jsp input pole usr.oldPassword).

Pro přihlášení administrátora jsme přidali možnost vynuceného nastavení dvou-faktorové autorizace. Zapne se nastavením konf. proměnné isGoogleAuthRequiredForAdmin na true. Následně při přihlášení uživatele, který nemá nastavenou dvoj-faktorovou autorizaci, se zobrazí QR kód na její nastavení.

Přidali jsme i odhlášení administrátora ze všech prohlížečů po změně hesla. Nestane se, že útočník nadále používá autorizovanou session, i když heslo bylo mezi tím změněné.

Další úpravy související s bezpečností hesel a přihlašováním:

  • Administrátor - upravená změna profilu administrátora, pokud nemá oprávnění na modul Uživatele - při změně hesla je potřeba zadat staré heslo
  • Administrace - po změně hesla se uživatel odhlásí z ostatních session (prohlížečů)
  • Cookie - zlepšená kontrola session cookie (provázané na IP adresu), přidaná kontrola více URL adres a kontrola na všechny jiné jako http GET metody
  • Upravili jsme hlášení při zapomenutém hesle (forget_password.jsp), aby nebylo možné identifikovat, či dané konto existuje, nebo ne
  • Přihlašování - přidali jsme zrušení původní session při přihlášení (vykoná se při prvnímm odeslání přihlašovacích údajů)
  • Přihlašování - přidaná možnost nastavit seznam session objektů, které zůstanou zachované po přihlášení. Nastavují se v konf. proměnné logonPreservedSessionObjects (předvolené nastavené na adminAfterLogonRedirect,BasketDB.browserIdSession)
  • Přihlašování (veřejný web) - přidaná možnost vyžadování captcha při přihlašování. Zapne se přidáním hodnoty usrlogonform do konf. proměnné captchaComponents
  • Registrace živatele - doplněná SPAM ochrana (aby nebylo možné strojově registrovat velké množství uživatelů). Speciální limity je možné nastavit přes konf. proměnné spamProtectionHourlyLimit-userform a spamProtectionTimeout-userform.
  • Registrace uživatele - přidaná možnost ochrany registrace cez Captcha test. Stačí do konf. proměnné captchaComponents přidat hodnotu userform
  • Registrace uživatele - přidaná serverová validace e-mailu a telefonního čísla (když je povinné). Telefon se validuje vůči regulárnímu výrazu zadanému v Ovládací panel->Formuláře->Regulární výrazy s kódem phone
  • Facebook - při přihlašování přes Facebook se nezobrazuje při editaci profilu povinnost zadat staré heslo, když uživatel v průběhu přihlašování heslo nezadává. Takovýto uživatel se identifikuje pomocí uživatelské skupiny, které je ID definované v konf. proměnné socialMediaUserGroupId
  • Autorizace - předvolené se při autorizaci uživatele generuje nové heslo. Nastavením konf. proměnné authorizeRegeneratePassword na false, se nové heslo nebude generovat, ale zároveň v autorizačním e-mailu nemůže být posílané heslo (když WebJET ho neumí zjistit). Takové nastavení se dá použít, když uživatel zadává heslo při registraci a je povolené toto heslo po schválení používat (nechceme vynutit ověření e-mail adresy resetem hesla).

Další bezpečnostní změny

  • Archív souborů - doplněné auditování všech změn
  • Cleditor - Otázky a odpovědi - v mini WYSIWYG editoru, který se používá pro Otázky odpovědi a další části WebJETu bylo přidané čištění HTML kódu (odstranění style elementů) při vkládání např. z Wordu. Na stránku se tak nedostane nebezpečné formátování
  • Cleditor - aktualizovaná verze editoru s podporou IE11
  • Combine.jsp - upravená kontrola custom verzí JSP vůči seznamu povolených URL (combineEnabledJsps). Porovnává se vždy původní verze, aby se dala lehce vytvořit custom verze např. page_functions.js.jsp bez potřeby implicitního uvedení custom verze do seznamu combineEnabledJsps.
  • Editor stránek - upravené auditování, aby bylo možné zjistit, či se jedná o novou stránku, nebo o upravenou stránku (přidáním (newpage) do auditního záznamu).
  • Export do excelu - v seznamu uživatelů a formulářů přidaná ochrana před vykonáním cmd příkazu v Excel exporte.
  • Hromadný e-mail - zrušené vkládání jQuery knihovny do e-mailu (podle parametru isDmail=true)
  • Monitorování serveru - pro službu uptimerobot.com přidána výjimka - povolení HEAD http metody, kterou služba používá
  • Novinky - opravené uzavírání DB spojení v novinkách (velocity) při nesprávném DB dotaze.
  • NTLM - přidaná možnost definovat více admin skupin v konf. proměnné NTLMAdminGroupName (seznam skupin oddělených čárkou)
  • NTLM - při nastavení konf. proměnné NTLMcompareUserPermGroups na true se nebudou porovnávat vůči AD skupinám uživatelské skupiny, ale skupiny práv
  • Odhlášení - přidaná možnost nastavení odkazu na odhlášení z admin části, přes konf. proměnnou adminLogoffLink (předvolené /logoff.do?forward=/admin/)
  • Přesměrování domén - pro přesměrování typu ALIAS se nepoužijí následné přesměrování cílových domén (např. vynucené httpS spojení). Např. při nadefinování přesměrování domena.sk->https://domena.sk a zároveň aliasu aliasdomeny.sk->domena.sk nebude docházet při přístupu k aliasdomeny.sk k přesměrování na https://domena.sk. Pokud je vystavený certifikát i pro aliasdomeny.sk je možné přesměrování na httpS verzi nastavit samostatně.
  • Soubory - opravené zobrazení přihlášení pro soubory v chráněných adresářích. Zobrazí se přihlášení přes standardní komponentu /components/user/logon.jsp, místo staré komponenty /logon.jsp
  • Soubory - opravená kontrola práv pro soubory v adresáři /files/protected/. Původně se předpokládalo hledání shody v názvu skupiny, práva je ale možné nastavit speciálně (na jinou skupinu jako je název adresáře). Nyní se kontrolují obě možnosti.
  • Soubory - při reindexaci souborů se zachová ID uživatele, který soubor vytvořil.
  • Vyhledávání - opravené generovaní náhledu textu ve výsledcích vyhledávání tak, aby se do textu negenerovala část INCLUDE parametrů
  • Web stránky - opravená kontrola práv pro stránky ve více adresářích (multi kategorie), pokud uživatel neměl právo na hlavní adresář
  • XSS - při detekci XSS útoku v některém parametru, se do přesměrování nepřenesou parametry obsahující v názvu password, email, phone, login, aby se potencionální citlivé informace nezaznamenaly do access logu
  • XSS - opravené nastavení HTTP hlavičky X-XSS-Protection při náhledu stránky v editoru (aby bylo korektně možné stránku zobrazit, pokud podle prohlížeče obsahuje podezření na XSS útok).
  • XSS - upravené získání serverName z HTTP hlavičky x-forwarded-host, aby nebylo možné vykonat XSS útok.

Systémové změny

WebJET 8.6 je připravený na provoz s aplikačním serverem Tomcat 8.5 nebo novějším. Ten změnil zpracování symbolických odkazů na Linuxovém prostředí, což způsobovalo nekompatibilitu s WebJETem (špatné určení URL adresy souboru). V předcházejících verzích bylo možné použít konf. proměnnou symlinkTranslate na "opravu" chybně vytvořených cest k souboru, WebJET 8.6 upravil způsob získání cesty a umí se s tímto problémem vypořádat automaticky.

Tomcat 8.5.39 obsahuje chybu, která neumožňuje nastavit HTTP hlavičky se status kódem při generování 404 stránky. V této verzi se tedy nevykonávají korektně přesměrování. Upravili jsme kód stránky 404 tak, aby se vygeneroval i HTML kód, který přesměrování vykoná (když se nepodaří přesměrování pomocí HTTP hlavičky).

Také jsme přidali možnost programování importu z xlsX souborů implementovaním třídy sk.iway.iwcm.ExcelXImport. Původní importy xls formátu zůstávají zachované, jednoduchou úpravou kódu (nahradením ExcelImport za ExcelXImport) je možné změnit podporu na xlsX soubory (API je stejné pro oba případy).

Logování

Uskutečněný přechod na log4j standard logování. V konf. proměnné logLevels je možné nastavit seznam Java packages a jejich úrovní logování, např.:

sk.iway=DEBUG
sk.iwat.iwcm=WARN
org.springframework=WARN

Konfigurační proměnná logLevel nastavuje logování pro package sk.iway, nastaví se před hodnotou v proměnné logLevels. Dynamické přepínání přes parametr _logLevel tedy změní celý package sk.iway.

Vizuální úpravy

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

  • Administrace - vizuálně upravené zobrazení jednotlivých aplikací a částí - snížená výška hlavičky pro víc informací na stránce, zrušené záložky, kde nedávaly praktický smysl, zrušený zalomený roh vpravo nahoře (byl náročný na rendering v prohlížeči)
  • Editor - opravené zobrazení v popup okně (překrývání záložek s titulkem stránky)
  • Logo - vyměněné loga WebJET za nové, včetně detekce MSG a NET.
  • Pomocník - upravené zobrazení v CZ a EN verzi (modré pozadí v obsahu)
  • Pomocník - přidaná možnost zobrazení manuálu k danému webu v pomocníkovi. Stačí uložit soubor (např. pdf) do adresáře /components/INSTALL_NAME/admin/help/manual a v pomocníkovi se zobrazí další sekce Manuál k vašemu webu.

Ďalší systémové změny

  • Formuláře - přidaná možnost doplnit hodnoty polí na serverové straně po odeslaní formuláře pomocí interceptora implementujícího interface FillRequestInterceptor. Umožní to zjednodušit zadávání údajů složitých formulářů, kde místo zadávání seznamu např. registrovaných uživatelů na konferenci (jméno, příjmení, e-mail) je možné seznam importovat z Excelu. Nastaví se skrytým polem s názvem fillRequestInterceptorClass, kde je zadané FQDN jméno třídy, která se vykoná. Je možné importovat i XLS soubor, z kterého se můžou načítat data, a ty vložit do polí formuláře. Soubor musí být v input poli typu file s názvem fillRequestInterceptorFile
  • Konfigurace - přidané promazání cache po změně konf. proměnné multiDomainFolders (už není vyžadovaný restart aplikačních serverů)
  • JPA - upravili jsme JPA beany používající sekvenci na autoincrement, sekvence se používá jen pro Oracle. Důvodem je, že Microsoft SQL 2012+ začalo poznávat sekvence a používalo jich místo identity, i když sekvence historicky pro MS SQL nebyly vytvořené. Stará verze 2008 vždy použila identity, když sekvence nepoznala
  • JPA - upravená inicializace JPA tříd - hledají se třídy podle anotace a ne podle názvu souboru
  • Ninja - upravený browser detector z implementace net.sf.uadetector na standardní WJ BrowserDetector
  • Soubory - upravené poskytování souborů (při zapnutém enableStaticFilesExternalDir na true) z jednoduchého odeslání souboru na korektní zpracování Range requestů (vyžadované při přehrávání mp3 souborů na MacOS/iOS)
  • JarPackaging - přidaná podpora uchování JSP souborů admin a components adresáře v JAR souboru (v podadresáři META-INF/resources). Funkce umožní vytvářet projekty závislé na WebJETe bez JSP souborů WebJETu přímo v projektu. Soubory je potrebné uložit do JAR archívů /WEB-INF/lib/1webjet-admin.jar a /WEB-INF/lib/1webjet-components.jar, při startu se archív components detekuje a automaticky sa zapne podpora. Automaticky jsou vyloučeny soubory /components/INSTALL_NAME.
  • Tomcat7 - přidaná automatická detekce Tomcat7 a inicializace Springu bez components adresáře s podporou JSP souborů
  • Vue.js - pridaná TLD knihovna vue.tld pro podporu generovávní vue komponent (vue:text, vue:checkbox, vue:radiogroup, vue:checkboxgroup, vue:messages, vue:textarea, vue:select, vue:datetime, vue:currency, vue:address, vue:map)

Jiné změny (changelog)

Ostatní změny z changelogu, které nejsou uvedené výše.

  • 404 - přidaná kontrola platnosti (vypnutí zobrazení) 404.html sránky
  • Basket / nákupní košík - upravené připisování sumy z platební brány - suma se připíše i když je vyšší (do jednoho eura) z důvodu např. zaokrouhlování.
  • Editor - opravené nahrávání obrázků přetáhnutých přímo do textu v editoru
  • Editace textů - upravený import/export textů obsahujících znak \n přímo v textu, při importu nebude tento znak zaměněný za nový řádek, ale zachovaný přímo jako \n jako byl původně zadaný
  • Multidomain - opravená chyba poskytování obrázků/souborů pro multidomain WebJET při použití doménových aliasů na obrázky/soubory
  • Uživatelé - registrační formulář - opravený test existence fotografie uživatele při editaci profilu
  • Uživatelé - přidaná možnost volat vlastní Java metodu po smazání uživatele. Nastaví se v konf. proměnné userAfterDeleteMethod, která dostane jako parametr objekt UserDetails, který se maže. Je tak možné smazat i dodatečné data uživatele v dané instalaci.
  • Updatedb - opravené sortování naposledy vykonaných SQL příkazů podle datumu vykonání

Příprava pro WebJET 9

Z důvodu přechodu na WebJET CMS verze 9, jsme museli v zdrojovém kódě vykonat více změn. Verze 9 je ve znamení "změn pod kapotou" jako 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 byl moderní nejen z vizuálního směru, ale i z toho na pozadí.

Od počátku WebJET CMS jsme používali framework Struts, který v době jeho vzniku byl nejpoužívanější. Dnes ale existují modernější frameworky jako Spring a tedy Struts framework, odstraňujeme jako první.

  • Editor - veľká změna API načítání a ukládání dat editoru stránek ze staré verze v Struts frameworku na REST službu
  • Klonování struktury - upravené na API EditorForm (bez potřeby volání Struts Action tried)
  • Přetvořený /formmail.do a /admin/multiplefileupload.do ze Struts frameworku na standardní Servlet. Po aktualizaci je zapotřebí prověřit funkčnost formulářů (týká se hlavně standardního odeslání formuláře) a nahrávání souborů např. ve fotogalerii
  • Přihlašování do admin části změněné na novou verzi přes Spring (odstraněné používání starého Struts frameworku)
  • Přihlašování - spojení ukládání přihlášeného uživatele do WebJETu a do Springu do jedné společné metody LogonTools.setUserToSession, aby nedocházelo k rozdílnému přihlášení. Pro REST služby doplněná přihlašovací obrazovka do admin části.
  • Přihlašování - SPRING - doplněná detekce podle /admin URL, detekuje zda se má přihlásit uživatel jako admin, nebo jako bežný návštevník
  • Přepracované odhlašování (LogoffAction->LogoffServlet), náhled stránky (PreviewAction->PreviewServlet), zobrazení stránky (ShowdocAction->doc.ShowDoc), mazání stránky (DeleteAction->DeleteServlet) ze Struts na Servlety. V závorkách jsou uvedené náhrady původní Java třídy za novou.

Postupně jsme upravili i více tabulek v administraci na moderní verzi datové tabulky. Datatables knihovna umožňuje jednoduché filtrování a uspořádání podle sloupců přímo v prohlížeči bez potřeby odesílání dat na server. Práce je tedy rychlejší a efektivnější.

  • Anketa - předělaný seznam anket do datatables
  • Editace textů - předělané na datatables pro jednodušší použití
  • Formuláře + seznam regulárních výrazů - předělané do datatables zobrazení s filtrem nad sloupci
  • Kalendář událostí - upravené zobrazení na datatable, vizuálně upravené
  • Konfigurace - předělané do datatables s vyhledáváním přímo nad sloupci
  • Otázky a odpovědi - seznam v admin části upravený na datatables
  • Přesměrování domén - upravené na datatables
  • Rezervace - upravené zobrazení na datatable, vizuálně upravené
  • Tooltip - upravené zobrazení na datatable, vizuálně upravené
  • Úlohy na pozadí - upravené na datatables
  • Vkládání skriptů - upravené zobrazení na datatable, vizuálně upravené
WebActive s.r.o., Hviezdoslavova 16, Ústí nad Labem 400 03
tel.: +420 605 584 425
e-mail: info(at)webactive.cz
Facebook   Youtube   Vimeo   LinkedIn