Bezpečnosť I. - formuláre

  • 04.12.2014
  • Ing. JANATA Ján

<br />
<b>Notice</b>:  Undefined index: articleImageRow in <b>/home/html/javi.sk/public_html/External/smarty/templates_c/778e08eb760a00aa7de8031bc1300ed7d0399496.file.Article_JVI.tpl.php</b> on line <b>55</b><br />

Kontaktný formulár, registračný formulár, prihlásenie do mailing listu... Zriedkavo nájdeme webstránku, ktorá by dnes neobsahovala aspoň jeden z týchto "jednoduchých" spôsobov komunikácie s návštevníkom. Popri cieli zaujať návštevníka grafikou a kvalitným obsahom je súčasne dôležité poskytnúť mu čo možno najjednoduchší spôsob nadviazania kontaktu. Nekvalitný komunikačný kanál je však často kontraproduktívny a môže viesť k nezáujmu - k strate návštevníka (potenciálneho zákazníka).

V jednoduchosti je krása...

Možno povedať, že funkciou základných formulárov je zaslať vyplnenú správu a umožniť tak návštevníkovi iniciovať vytvorenie kontaktného vzťahu. Je teda na mieste tvrdenie, že základným typom je kontaktný formulár. Prevádzkovatelia webstránok nezriedka zabúdajú na hlavný účel kontaktného formulára, ktorým je spomínané nadviazenie prvého kontaktu. Nie, kontaktný formulár nemá slúžiť na automatickú registráciu do "mailing listov", ani na registráciu do zákazníckeho systému / eshopu. Návštevník chce jednoducho položiť otázku a v momente, kedy mu ju prevádzkovateľ webstránky zodpovie očakáva koniec. Koniec komunikácie, žiadne zasielanie akciových ponúk, vianočných prianí...

Vždy ide o jednoduchosť... Čím menej údajov od návštevníka formulár vyžaduje, tým je vyššia šanca, že formulár vyplní okamžite. A naopak - znižuje sa pravdepodobnosť, že vyplnenie formulára ponechá na neskôr (prípadne naň úplne zabudne).

Nevhodnou súčasťou kontaktného formulára sú napríklad "checkboxy", ktorými "súhlasí so spracovaním osobných údajov na účely marketingu". A vrcholom je, ak sú vopred označené...

Iba potrebné údaje...

V momente, keď návštevník pristúpi k vyplneniu kontaktného formulára, registrácie do "mailing listu", alebo registrácie do eshopu je rozhodnutý pre túto formu komunikácie. Mal na výber. Mohol zvoliť telefonický kontakt, alebo osobnú návštevu... Vybral si ale formulár a keďže dostal možnosť voľby, treba ju akceptovať. Preto je vhodné vyžadovať iba naozaj potrebné údaje:

Kontaktný formulár:

  • e-mailová adresa,
  • text správy.

Registrácia do "mailing listu":

  • e-mialová adresa.

Registrácia do zákazníckeho systému / e-shopu:

  • e-mailová adresa,
  • heslo.

Takto jednoduchý formulár v návštevníkovi vzbudí väčšiu dôveru a zvýši šancu, že formulár vyplní. Samozrejme formulár môže obsahovať ďalšie polia - tie by však mali byť zásadne voliteľné.

Čo s údajmi?

Návštevník po vyplnení musí dostať potvrdzujúci e-mail, v ktorom sú zhrnuté poskytnuté údaje, prípadne informácie o ďalšom postupe (ak je potrebný). Je vhodné do e-mailu doplniť kontaktné údaje, ktoré môže použiť pre okamžité kontaktovanie. Treba si uvedomiť, že tento e-mail dostane návštevník priamo do svojej schránky a tomu treba prispôsobiť grafiku - logo, farby, odkazy na sociálne siete...

Najhoršia alternatíva s ktorou sa možno stretnúť sú e-maily, na ktoré návštevník nemá odpovedať , pretože boli "generované automaticky"...

Bezpečnosť

SQL Injection

Existuje veľkém nožstvo "backend" systémov, na ktorých webstránky fungujú. Najčastejšou kombináciou poskytovanou hostingovými spoločnosťami však býva Apache + PHP + SQL (MySQL) - pre jednoduchosť a robustnosť. Preto sa SQL injection teší priazni "útočníkov". SQL príkazy majú textovú formu a v niektorých prípadoch je teda celkom ľahké zmeniť SQL príkaz s požiadavkou na databázu.

Predstavme si jednoduchý formulár s textovým poľom, ktoré sa využíva na vyhľadávanie v zozname článkov. Po vyplnení textu bude v najzákladnejšom prípade vyzerať SQL príkaz asi nasledovne:

$vysledok = "SELECT * FROM clanky WHERE nazov = " + $vyhladavany_text;

V prípade, že server neošetrí premennú $vyhladavany_text, môže byť vyhľadávanie zneužité. Jednoduchým spôsobom je zadanie vyhľadávaného textu:

x OR 1 = 1

Čím dosiahneme zaslanie SQL príkazu:

SELECT * FROM clanky WHERE nazov = x or 1 = 1

Podmienka OR 1 = 1 bude vždy pravdivá a preto získame všetky záznamy z danej tabuľky. Pri  tabuľke článkov toto nemusí byť kritické, treba si však uvedomiť, že podobným spôsobom je možné získať postupne zoznam tabuliek v databáze, obsah týchto tabuliek...

Riešení je veľké množstvo, vždy však ide o ošetrenie zadaného textu do formátu, ktorý neumožňuje SQL serveru interpretovať daný reťazec ako časť SQL príkazu.

XSS - Cross-site scripting

Je metóda využitia bezpečnostných chýb v skriptoch stránky - primárne neošetrených vstupov. Táto chyba sa využíva pri podstrčení vlastného JavaScript-ového kódu do www stránky. Tento Javascript-ový kód potom vo väčšine prípadov vykoná presmerovanie na Phishing-ovú webstránku, ktorá je graficky takmer totožná s pôvodnou webstránkou. Na tejto Phishing-ovej webstránke návštevník vyplní napríklad prihlasovací formulár a tým pádom poskytne útočníkovi svoje prihlasovacie údaje. Mnohé Phishing-ové stránky pracujú tak sofistikovane, že užívateľa pomocou získaných prihlasovacích údajov aj prihlásia k pôvodnej stránke, čím znížia riziko spozorovania podvrhu zo strany návštevníka.

SPAM - roboti

Všetky verejné (public) formuláre musia počítať s tým, že sa k nim skôr či neskôr dostane SPAMBOT - teda program prechádzajúci webstránky a vypĺňajúci formuláre. Tento SPAMBOT je schopný vyplniť kontaktný formulár desiatky / stovky / tisíce krát po sebe. Je veľmi nepríjemné, ak si v e-mailovej schránke nájdete 50, 100, alebo viac e-mailov s akciovou ponukou na viagru. Existuje však viacero možností, ako sa pred SPAMBOT-mi chrániť:

  • captcha,
  • honeypot,
  • time evaluation,
  • ...

CAPTCHA je veľmi účinný spôsob ochrany - ako pred SPAMBOTMI, tak i pred návštevníkmi :) CAPTCHA je založená na prepísaní textu z obrázka s často dobrými úmyslami - napríklad digitalizácia textu kníh. Najviac využívanou CAPTCHA službou je RECAPTCHA. Toto riešenie je však stále viac na ústupe. Často sa totiž stáva, že úloha prepísania textu, ktorú nezvláda SPAMBOT je priťažká aj pre človeka...

HONEYPOT, ako už názov napovedá je pasca na SPAMBOT-ov. SPAMBOT-i na rozdiel od návštevníkov neprechádzajú webstránku po vizuálnej stránke, ale po zdrojovom kóde. HONEYPOT je teda vstupné pole vo formulári, ktoré návštevník neuvidí a teda ho nevyplní. SPAMBOT ale vyplní prevažne všetky polia formulára a tým sa "prezradí"...

TIME EVALUATION je metóda, ktorá sa využíva v súčinnosti s ostatnými - napríklad HONEYPOT. Je samozrejmé, že bežný návštevník nedokáže vyplniť kontaktný formulár v čase napríklad 2 sekundy. SPAMBOT s tým všk problém mať nebude a dokáže to prakticky okamžite. Jednoduchou kontrolou času potrebného na vyplnenie formulára teda je možné čiastočne eliminovať SPAM. Pri implemenácii je potrebné dať pozor na minimálnu dobu potrebnú na vyplenenie formulára, aby nebol poškodený návštevník...

Na záver

Fomruláre na webstránkach bývajú často spôsobom nadviazania prvého kontaktu medzi prevádzkovateľom a návštevníkom. Prevádzkovateľ by mal brať ohľad na staré a otrepané "...náš zákazník, nás pán..." a prispôsobiť sa tomu tak, že návštevníkovi interakciu s webstránkou čo možno najviac spríjemní a zjednoduší...