autentizace, uživatelsky orientované aplikace ...lysek/data/wa/prezentace09.pdfphp7 je opravdu...

Post on 22-May-2020

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Webové aplikace

Autentizace, uživatelsky orientované

aplikace, internacionalizace a lokalizace

Připravil: Ing. Jiří Lýsek, Ph.D.

Verze: 13. 2. 2019

Autentizace

• Proces ověření identity uživatele

• Obvykle pomocí loginu a hesla

– login je unikátní

• někdy email (problém se změnou)

– heslo je "klíč"

strana 2

Jiné způsoby autentizace

• něco znát

– heslo, pin

• něco mít

– klíč, čip, mobil pro opsání kódu, certifikát…

• někým být

– otisky prstů, oční sken, rozpoznání obličeje

• => vícestupňové ověřování

– kombinace

strana 3

Autentizace - uložení hesla

• plain text

– někdy se používá přímo v kódu!!!

• hash a salt

– nepoužívat md5 ani sha1

• nový modul v PHP (5.5.0)

– password_hash()

– password_verify()

strana 4

Práce se saltem - schema

strana 5

Autentizace - zabezpečení

• Můžeme omezit počet pokusů pro

přihlášení za časovou jednotku

– je možné upozornit administrátora

• Je možné vyžadovat heslo minimální

délky s rozmanitými znaky, aby byl

ztížen útok hrubou silou

• Salt chrání shodná hesla v DB

• Nejlepší je 2F ověření

strana 6

Napadení hashe

• kolize hashů

– 2 jiné řetězce generují stejný hash

• brute-force

– hledání hesla zkoušením kombinací

– proto musí být hashovací funkce pomalá

– Pro generování hashů lze využít GPU

• desítky miliónů za sekundu (md5)

strana 7

Ukázka md5 brute-force útoku

• Rychlost generování hashů za

sekundu

strana 8

Vždy na jedno jádro md5 sha1 password_hash()PASSWORD_BCRYPT

Intel Core i5 3,2GHz

PHP 5.6.17

607000 580000 15

Intel Core i5 3,2GHz

PHP 7.0.4

1030000 1030000 15

Akela PHP 5.6.16 406000 390000 15

Intel Core 2 Duo 2,1GHz

PHP 7

800000 715000 10

PHP7 je opravdu

rychlejší!Heslo délky 6 a-z:

308 915 776

Autorizace v SPA aplikacích

• REST zakazuje použít session

• Používají se tokeny

– Token obsahuje datovou část a kontrolní

součet, který zabraňuje svévolné

modifikaci

– Klíč je znám jen na backendu

– Např. JWT

strana 9

Ukládání uživatelských atributů

• Uživatel může v aplikaci provádět

různá nastavení

– není vhodné ukládat vše do jedné

tabulky, např. ''users"

– vytvoříme např. tabulku adres, tabulky

nastavení pro jednotlivé moduly apod.

– někdy je vhodné volitelné nastavení

ukládat pod identifikátory (není nutné

měnit strukturu DB)

strana 10

Ukládání uživatelských atributů

strana 11

nutná

změna DBsložitější

realizace, bez

nutnosti měnit DB

co když

potřebuju

evidovat nové

nastavení?

ACL model

• Access Control List

– Řídí přístup uživatel ke zdrojům

• Obvykle je realizován pro skupiny (role)

– Uživatelé ve skupinách

– Může se dědit

• Každá skupina má seznam povolených

akcí pro dané zdroje

– Lze realizovat i zakázané akce

strana 12

ACL

strana 13

ACL

$group = $currentUser->getGroup();

if($group->hasPerm('delete_user')) {

$anotherUser->delete();

} else {

showError('Permission denied');

}

strana 14

Internacionalizace a lokalizace

strana 15

Internacionalizace a lokalizace - proč?

• Zahraniční návštěvníci/zákazníci

– naši nebo našich zákazníků

– jsme země uprostřed Evropy

• ale malá

– internet je celosvětový

strana 16

Internacionalizace

• Proces rozšíření aplikace, aby byla

schopná pracovat v jiných prostředích

– je to hledisko návrhu aplikace

– jen potenciálně, nemusí se to nikdy stát

• Zkratka i18n

– Internacionalisation

strana 17

Lokalizace

• Proces přizpůsobení aplikace

lokálnímu prostředí

– Děje se vícekrát, podle počtu trhů kde

prodáváme produkt

• Zkratka l10n

– localisation

strana 18

i18n a l10n

• Není to drahé, ale je potřeba systém

navrhnout a vyvíjet přímo s podporou

• Nejde udělat vše

• Pro správce stránek je to HODNĚ

práce navíc

– Místo jednoho webu má najednou n

webů

strana 19

Hlavní znaky

• Možnost přepnout/nastavit

– jazyk

– formát data

– první den týdne

– měnu

– jednotky

– směr textu (např. zprava doleva)

– způsob výpočtu daně, spotřeby, …

– …

strana 20

Na co je potřeba myslet

• Data v DB

• Statické texty v šablonách

• Krátké hlášky (např. chyby)

generované z PHP nebo JS

• Texty v obrázcích

– Design

– Obsah

• Rozdíly v CSS

strana 21

Data v DB 1

• Pro každý jazyk samostatná tabulka

– Někdy vhodné, protože chceme oddělit

obsah pro různé jazyky

• articles_cze, articles_eng

• news_cze, news_eng

• products_cze, products_eng

strana 22

přidání jazyka znamená

modifikaci DB

Data v DB 2

• Každá entita na vlastním řádku

– Někdy vhodné, protože chceme oddělit

obsah pro různé jazyky

strana 23

není nutné modifikovat

DB pro další jazyk

Data v DB 3

• Pro každý jazyk speciální pole u

rozdílných záznamů

– Obsah v jiných jazycích není oddělen

– Pro neexistující překlad se použije výchozí

– products

• id, title_cze, title_eng, description_cze,

description_eng

strana 24

přidání jazyka znamená

modifikaci DB, ale vše je

v jedné tabulce

Data v DB 4

• Jazykově závislé texty v separátní

tabulce

– Výchozí texty přímo

– Výchozí text je

snadno dostupný

– LEFT JOIN VS

JOIN

strana 25

není nutné modifikovat

DB pro další jazyk, ale

jsou složitější SELECTy

Data v DB

• Je vhodné umět zkombinovat přístupy,

jelikož každý se hodí k něčemu jinému

• Vyžaduje vhodné administrační

rozhraní

• Problém je lokalizace nepřeložených

textů

– Použije se výchozí jazyk

– Jak to poznat?

strana 26

Data v DB - kde použít co?

• Máme dáno N jazyků nebo nevíme?

• Individuální tabulky/řádky

– Kde je obsah pro různé jazyky jiný

• co není nutné pro všechny mutace

– Např. články, novinky, menu, bannery, …

• Sloupce/překladová tabulka

– Kde se liší jen některé údaje

– Např. produkty eshopu, kategorie článků,

názvy parametrů, …

strana 27

Data v DB - čísla, data, ceny, …

• Cena, technické parametry, data,

časy…

– Lze uložit v základní hodnotě a aplikovat

přepočet (konverzi) až při zobrazení

– Čas i se zónou

• Výhodou je, že se nemusí editovat vše

dle počtu jazyků

– Při editaci se použije buď výchozí

hodnota nebo je nutná konverze

strana 28

Statické texty v šablonách

• Někdy jde o velké kusy textu

• Je možné používat identifikátory a

text ukládat samostatně jinde

– Přímo v šabloně (přehledné?)

– v DB

• klient může snadno upravit, není nutná

synchronizace

– v jiném souboru

strana 29

Statické texty v šablonách

$messages = array(

"cze" => array(

"nadpis" => "Ahoj světe!",

),

"eng" => array(

"nadpis" => "Hello world!",

),

);

<h1>{nadpis|translate}</h1>

strana 30

Krátké hlášky v kódu

• Pro chyby a potvrzení

• Obvykle se ukládají překlady do DB, v

kódu je např. jen výchozí verze

$message = getMessage(

"forms.register.errorTaken",

"Username already taken."

);

strana 31

identifikátor a

výchozí

Krátké hlášky v JS

• Snažíme se do JS nedávat pevné

textové hlášky

– lze vložit v HTML šabloně jako skrytý

element

• JS kód lze generovat podobně jako

šablonu (pomalé)

• Napsat vlastní systém pro vyhledávání

hlášek pomocí identifikátorů v JS

strana 32

Texty v obrázcích

• Snažíme se texty do obrázků nevkládat

– můžeme použít např CSS font, rotaci,

efekty…

• Obrázky mohou mít více variant

<img src="{img.png|lngimg}" />

– načte např. cze/img.png nebo eng/img.png

strana 33

filtr pro

vložení

Rozdílná CSS

• Dodatečný CSS soubor načtený podle

jazyka

– Načteme např.:

• style_cze.css

• style_eng.css

– Stejné CSS třídy ale

• jiné obrázky pro pozadí

• jiné velikosti/pozice elementů

• některé elementy mohou být zneviditelněné

• …

strana 34

co směr

textu?

ORM a šablony

• Je nutné mít podporu v ORM vrstvě

– názvy tabulek a sloupců se mění podle

aktuálního jazyka nebo se připojuje

tabulka s překlady

• Šablonovací systém musí umožňovat

překlady

– statické hlášky, lze řešit přes filtry

{…|totoPreloz}

strana 35

SPA a REST

• REST API komunikuje v daném

jazyku, který volí frontend

– /cs/product/1513

– /en/product/1513

• Statické hlášky v šablonách stejně

jako na backendu (identifikátor +

překlad do všech jazyků)

strana 36

Další informace

• Existují systémy pro strojový překlad

– nekvalitní výsledky

• Přidání nebo odebrání jazyka pro

překlad je obvykle operace vyžadující

změnu struktury databáze

– Místo identifikátorů hlášek lze jako klíč

pro vyhledání textu použít přímo výchozí

text

• Pak lze mít překlady v jedné tabulce a

neměnit DB

strana 37

Další informace

• Složitější systémy pro překlady umí:

– jednotné číslo

– množné číslo

– množné číslo na základě hodnoty

• 1 program

• 3 programy

• 5 programů

strana 38

Podpora ve frameworcích

• Většina frameworků podporuje překlad

statických textů v šablonách

• Problém může být ORM protože

struktura DB záleží na požadavcích

aplikace a zákazníka

– Překlady ovlivňují SQL dotazy (data jsou

v DB)

– Někdy je ORM spíš překážka

strana 39

Checkpoint

• Proč nepoužívat session u REST API?

• Proč má být hashovací funkce

pomalá?

• Co všechno se dá lokalizovat?

• Proč je lepší internacionalizaci

aplikace provádět už od začátku?

strana 40

top related