Links ::  | DEV web management system | Katalóg | Webhosting | Recepty
  
 Index | Registrácia | Hľadať | Galéria | BoardNeprihlásený užívateľ  //Sobota, 25. Novembra 2017 
Navigation
Index
Top 10 autorov
Top 20 článkov
Hľadať
Galéria

Zones
Asp.(NET)
C/C++
Flash
Grafika+Design
Hardware
Hry
Html/Css/Xml
Java
Linux
Networks
Operačný systém
Pascal/Delphi
PHP
Security
Software
SQL
Visual Basic
Wap/Wml
Windows
Zóna iné

Links
Script index Interval.cz Pc.sk Regedit.sk TipyaTriky.sk Builder.cz Asp.cz Živě.sk Zoznam.sk Code.box.sk Root.cz Quant&Financial

Odkazy

Sessions
Stránky Developer.sk si práve číta 306 čitateľov, z toho je 0 zaregistrovaných

BackEnd
Odkazy na nové články je možné preberať pomocou backend.php

kuk

    Spracovanie vstupu - 5. časť CGI

V dnešnej časti seriálu o CGI si povieme niečo o tom, ako spracovať vstupné dáta ktoré užívateľ akýmkoľvek spôsobom odovzdá vášmu skriptu. Hneď na začiatok je však potrebné upozornenie: vždy dobre skontrolujte dáta, ktoré vám klient pošle na vstup CGI skriptu.


Nikdy na ich základe nepošlite klientovi naspäť informácie, ktoré môžu ovplyvniť bezpečnosť vášho servra!

CGI program môže ako vstup prijať jeden z troch typov dát:
  • informácie o klientovi, servri a užívateľovi
  • dáta z formulára
  • dodatočné informácie o ceste

O prvom a treťom type vstupných dát sme si už povedali, že ich môžete v CGI skripte použiť ako premenné (premenné prostredia), resp. získať ich pomocou premenných prostredia (info o ceste z premenných PATH_INFO, PATH_TRANSLATED, DOCUMENT_ROOT a SCRIPT_NAME). V minulej časti sme si zasa povedali o formulároch a o tom, aké dáta odovzdávajú skriptu, pozrime sa teraz teda na spracovanie týchto dát.

Pri odoslaní dát z formulára sa tieto odošlú servru pomocou jednej z metód GET alebo POST v tvare názov_prvku=hodnota_prvku. Ak je formulár tvorený viacerými prvkami, jednotlivé dvojice prvok-hodnota budú oddelené znakom &, čiže vstup bude vyzerať nasledovne:

prvok_1=hodnota_1&prvok_2=hodnota_2&...&prvok_n=hodnota_n

Dáta, ktoré prichádzajú na vstup skriptu môžu byť tvorené akýmikoľvek znakmi. Z pochopiteľnej príčiny sú teda znaky, ktoré nie sú písmenami či číslami zakódované do tvaru %XY, kde XY je hexadecimálny ASCII kód daného znaku. U medzery sa môže stať, že nebude odovzdaná ako %20, ale ako znak + (plus). Aby ste sa nemuseli trápiť s prácnym nahrádzaním znakov vo vašom CGI skripte, Perl vám na toto poskytuje príkaz pack, ktorý vo vhodnom regulárnom výraze (o regulárnych výrazoch si povieme v ďalšej časti, keďže ich budeme hojne využívať) zamení tieto ASCII kódy za príslušné znaky. Spomínaný regulárny výraz vyzerá nasledovne:

$vstupne_data =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;

Aby ste zabezpečili aj prevod znakov + na medzery, je potrebné vložiť pred tento reg. výraz ešte jeden:

$vstupne_data =~ tr/+/ /;

Spomínal som tu metódy POST a GET, pomocou ktorých odovdáva klient dáta na vstup skriptu. Metódu ktorá má byť použitá zadávate v atribúte METHOD tagu FORM. Aký je medzi týmito dvoma metódami rozdiel?

Metóda GET preberá dáta z premennej prostredia QUERY_STRING. Je defaultnou metódou používanou pri načítavaní dát do CGI skriptu. Keď teda zavoláte skript pomocou URL
http://www.mojserver.sk/cgi-bin/skript.cgi?vstup=data
, na načítanie týchto dát sa použije metóda GET, ktorá uloží do premennej $ENV{QUERY_STRING} reťazec vstup=data.

Metóda POST posiela dáta na vstup CGI skriptu pomocou štandardeného vstupu. Pri načítaní dát zo štand. vstupu musíte skriptu povedať, koľko dát (v bajtoch) má načítať. Toto samozrejme neviete vopred určiť (napr. v prípade, keď užívateľ posiela z formuláru odkaz, ktorý svojím skriptom spracovávate). Ak si však spomínate, existuje premenná prostredia s názvom CONTENT_LENGTH, ktorá obsahuje práve veľkosť vstupných dát.

Nasleduje perlovský skript, ktorý využíva všetko, čo sme si doteraz povedali. Spracúva vstup jednoduchého formulára, ktorým je užívateľ vyzvaný na zadanie mena. Zistí metódu, ktorou sú dáta odovzdávané, prečíta dáta, dekóduje ich a na ich základe vygeneruje dokument, ktorý užívateľa pozdraví (ako príklad vhodné :).

$metoda = $ENV{REQUEST_METHOD};
if ($metoda eq "GET") {
$data = $ENV{QUERY_STRING};
} else {
read (STDIN, $data, $ENV{CONTENT_LENGTH});
}
($nazov, $meno) = split(/=/, $data);
$meno =~ tr/+/ /;
$meno =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;
print "Content-type: text/plain";
if (!$meno) {
print "Aj keď si sa nepredstavil, vitaj!"; 
} else {
print "Vitaj $meno!";
}

Pozrite si ako to vyzerá v praxi.

Myslím že pochopiť tento príklad nie je zložité, takže zdržím sa vysvetľovania.

Ako som už sľúbil, nabudúce si povieme o regulárnych výrazoch, ktoré sú jednou z najsilnejších zbraní Perlu.


Autor : Developer, čítané 4395x, komentárov: 0
Hodnotenie :    |  Piatok, 14. Marca 2003

Pridať nový komentár/Komentáre
Vaše hodnotenie :   horšie  lepšie
Login
Login:
Heslo:

Hľadať
 
v článkoch
v diskusiach
v komentároch

Top read
PHP Coder

Priklady v C. 1.čast.

DEV web management system

Php a bezpečnosť skriptov

Autorun CD

Top discuss
Jednoduchý web formulár (ASP.NET)

Delphi seriál: (1.časť)

Velmi rychla grafika v Pascale

DEV web management system

Naša ikona
Páčia sa Vám naše stránky ? Ak áno, podporte nás prosím a umiestnite si na svoju stránku našu ikonku:





Copyright (c) Developer.sk, All rights reserved.
Powered by DEV web management system