marți, 15 martie 2011

SQL injection

SQL injection
Una dintre cele mai grave probleme de securitate web este SQL injection. Simplu spus, este posibilitatea executarii de comenzi SQL prin alterarea parametrilor paginilor. Problema este grava pentru ca altereaza date permanent salvate in baze de date care pot varia de la caz la caz: nume, parole, date confidentiale, chiar credit carduri, etc.
SQL injection apare datorita neverificarii parametrilor utilizati in comenzi SQL.

Cum sa protejam baza de date?
  • Este indicat sa folosim useri cu privilegii limitate. Nu e indicat sa ne conectam ca superuseri sau ca alt utilizator ce poate manipula mai multe baze de date, nu numai cea in discutie.
  • Trebuie introduse functii de validare, de la cele mai simple, pe variabile, si pana la expresii regulate.
  • Pentru inputuri numerice este indicat sa folosim functia "is numeric()".
  • Pentru valori numerice putem folosi functia "string escape" specifice SGBD-ului.
  • Nu trebuie sa afisam informatii specifice bazei de date, precum schema.
  • Trebuie sa evitam posibilitatea introducerii de caractere precum: ghilimele simple, ghilimele duble, slash, backslash, punct si virgula, caractere extinse precum NULL, linie noua, etc. in toate stringurile de input pentru utilizatori, parametri in URL si valori din cookie.

JavaScript - Obiectele javascript 2 (part12)

Obiectele Java Script - 2

In aceasta lectie este continuata prezentarea si explicarea obiectelor esentiale JavaScript

1. Obiectul Date

Obiectul Date se foloseste pentru a lucra cu data zilei si timp.

Sunt doua lucruri importante pe care trebuie sa le cunoasteti inainte de a folosi acest obiect:

1. Data initiala (de referinta) este 1-01-1970, nu puteti sa lucrati cu date anterioare acesteia.

2. Cand creati un obiect "Date", ora folosita de obiect este aceea de pe calculatorul client (al vizitatorului).

Pentru a crea o instanta a obiectului "Date" se foloseste operatorul new, ca in exemplu urmator:

var data = new Date

- Astfel se memoreaza data curenta intr-o variabila, aici cu numele "data".

Dupa ce a fost creata instanta, se pot folosi metodele obiectului.

De exemplu, daca se doreste afisat numarul zilei (care e de la 1 la 31) se scrie urmatoarea comanda (aici e folosita instanta cu numele "data"):

data.getDate()

Se pot crea si altfel obiecte Date, care pot afisa data si ora intr-un mod specificat:

new Date("Month dd, yyyy hh:mm:ss")

new Date("Month dd, yyyy")

new Date(yy,mm,dd,hh,mm,ss)

new Date(yy,mm,dd)

new Date(milliseconds)

- Unde: Month=luna, dd=ziua (cu 2 caractere), y=anul (yy e afisat cu 2 caractere iar yyyy cu 4), h=ora, m=minute, s=secunde, milliseconds=milisecunde.

Astfel se pot crea variabile de data pt. fiecare obiect Date de mai sus, ca in exemplu urmator:

var data=new Date("October 15, 1996 15:16:00")

var data=new Date("October 15, 1996")

var data=new Date(96,10,15,15,16,00)

var data=new Date(96,10,15)

var data=new Date(500)

- Metodele obiectului Date:

Date() - Returneaza un obiect Date

getDate() - Returneaza data (ziua) din luna (intre 1-31)

getDay() - Returneaza ziua dintr-un obiect Date (intre 0-6; 0=Duminica, 1=Luni, etc.)

getMonth() - Returneaza luna dintr-un obiect Date (intre 0-11. 0=January, 1=February, etc.)

getFullYear() - Returneaza anul dintr-un obiect Date (patru cifre)

getYear() - Returneaza anul dintr-un obiect Date (cu 2 cifre, intre 0-99). Este recomandat getFullYear

getHours() - Returneaza ora dintr-un obiect Date (intre 0-23)

getMinutes() - Returneaza minutele dintr-un obiect Date (intre 0-59)

getSeconds() - Returneaza secunda dintr-un obiect Date (intre 0-59)

getMilliseconds() - Returneaza milisecunda dintr-un obiect Date (intre 0-999)

getTime() - Returneaza numarul de milisecunde pana la miezul noptii

getTimezoneOffset() - Returneaza diferenta de timp intre computer si GMT

getUTCDate() - Returneaza data dintr-un obiect Date in (UTC) timp universal

getUTCDay() - Returneaza ziua dintr-un obiect Date in timp universal

getUTCMonth() - Returneaza luna dintr-un obiect Date in timp universal

getUTCFullYear() - Returneaza anul (4 cifre) dintr-un obiect Date in timp universal

getUTCHours() - Returneaza ora dintr-un obiect Date in timp universal

getUTCMinutes() - Returneaza minutele dintr-un obiect Date in timp universal

getUTCSeconds() - Returneaza secundele dintr-un obiect Date in timp universal

getUTCMilliseconds() - Returneaza millisecundele dintr-un obiect Date in timp universal

parse() - Returneaza un sir ce are ca valoare numarul de millisecunde pana in January 01 1970 00:00:00

setDate() - Seteaza luna in un Obiect Date (intre 1-31)

setFullYear() - Seteaza anul in un Obiect Date (four digits)

setHours() - Seteaza ora in un Obiect Date (intre 0-23)

setMilliseconds() - Seteaza millisecundele in un Obiect Date (intre 0-999)

setMinutes() - Seteaza minutele in un Obiect Date (intre 0-59)

setMonth() - Seteaza luna in un Obiect Date (intre 0-11. 0=January, 1=February)

setSeconds() - Seteaza secunda in un Obiect Date (intre 0-59)

setTime() - Seteaza millisecundele dupa 1/1-1970

setYear() - Seteaza anul in un Obiect Date (00-99)

setUTCDate() - Seteaza data in un Obiect Date, in timp universal (intre 1-31)

setUTCDay() - Seteaza ziua in un Obiect Date, in timp universal (intre 0-6. Sunday=0, Monday=1, etc.)

setUTCMonth() - Seteaza luna in un Obiect Date, in timp universal (intre 0-11. 0=January, 1=February)

setUTCFullYear() - Seteaza anul in un Obiect Date, in timp universal (four digits)

setUTCHour() - Seteaza ora in un Obiect Date, in timp universal (intre 0-23)

setUTCMinutes() - Seteaza minutele in un Obiect Date, in timp universal (intre 0-59)

setUTCSeconds() - Seteaza secundele in un Obiect Date, in timp universal (intre 0-59)

setUTCMilliseconds() - Seteaza millisecundele in un Obiect Date, in timp universal (intre 0-999)

toGMTString() - Converteste un Obiect Date la un sir, ce contine ora GMT

toLocaleString() - Converteste un Obiect Date la un sir, ce contine ora curenta

toString() - Converteste un Obiect Date la un sir

Pentru a intelege mai bine obiectul Date si modul de lucru cu metodele lui, studiati si urmatorul exemplu:

<script type="text/javascript">

<!--

var d = new Date()

document.write("Afiseaza data curenta a zilei: <br /> ")

document.write(d.getDate())

document.write(".")

document.write(d.getMonth() + 1)

document.write(".")

document.write(d.getFullYear())

//-->

</script> Adaugat intr-un document HTML, in sectiunea BODY, acest script va afisa:

Afiseaza data curenta a zilei:

26.8.2010 2. Obiectul Math

Acest obiect include constante matematice si functii.

Nu este nevoie sa fie creat (instantat) un obiect Math inainte de a fi folosit.

Daca, de exemplu dorim sa obtinem un numar aleator intre 0 si 1, scriem comanda:

nr_aleator = Math.random

- Proprietatile obiectului Math (sunt o lista de constante matematice. Atentie! se scriu cu litera mare):

E - Returneaza constanta lui Euler (2.7182.......)

LN2 - Returneaza logaritm natural din 2

LN10 - Returneaza logaritm natural din 10

LOG2E - Returneaza logaritm in baza 2 din E

LOG10E - Returneaza logaritm in baza10 din E

PI - Returneaza PI

SQRT1_2 - Returneaza radical din 0.5

SQRT2 - Returneaza radical din 2
- Metodele obiectului Math:

abs(x) - Returneaza valoarea absoluta din x

acos(x) - Returneaza arccosinus din x

asin(x) - Returneaza arcsinus din x

atan(x) - Returneaza arctangenta din x

atan2(y,x) - Returneaza unghiul dintre axa si un punct (x,y)

ceil(x) - Returneaza cel mai apropiat intreg mai mare sau egal cu x

cos(x) - Returneaza cosinus din x

exp(x) - Returneaza valoarea lui E la puterea x

floor(x) - Returneaza cel mai apropiat intreg mai mic sau egal cu x

log(x) - Returneaza log natural din x

max(x,y) - Returneaza maximul dintre x si y

min(x,y) - Returneaza minimul dintre x si y

pow(x,y) - Returneaza valoare a lui x la puterea y

random() - Returneaza un numar aleator intre 0 si 1

round(x) - Rotunjeste pe x la cel mai apropiat intreg

sin(x) - Returneaza sinus din x

sqrt(x) - Returneaza radical din x

tan(x) - Returneaza tangenta din x

Iata si un exemplu practic, urmatorul script rotunjeste o valoare (aici 8.35) la cel mai apropiat intreg:

<script type="text/javascript">

    document.write("8.35 rotunjit este: " + Math.round(8.35));

</script> Dupa ce este adaugat intr-un document HTML, in sectiunea BODY, acest script va afisa:

8.35 rotunjit este: 8 Obiecte de tip Global

Obiectele de tip Global grupeaza proprietatile si metodele de nivel cel mai inalt, fara un obiect parinte, cum sunt functiile.

Obiectul Global are trei proprietati:

Infinity - cuvant-cheie care reprezinta plus sau minus infinit

NaN - reprezinta un obiect null, care nu are vreo valoare

undefined - Indica daca o variabila a fost sau nu definita

Metodele acestui obiect (care pot fi considerate si functii JavaScript) sunt:

escape() - Intoarce un obiect sir in care toate caracterele non alfa-numerice sunt transformate in echivalentele lor numerice

eval() - Accepta un sir de instructiuni Java Script si il evalueaza ca fiind cod sursa

isFinite() - determina daca o variabila are limite finite

isNaN() - determina daca o variabila este sau nu un numar.

Number() - Converteste valoarea unui obiect in numar

parseFloat() - transforma un sir intr-un numar de tip float (cu virgula)

parseInt() - transforma un sir intr-un numar intreg

string() - Converteste valoarea unui obiect in string (de tip sir)

unescape() - ia o valoare hexazecimala si intoarce echivalentul sau in ISOLatin-1 ASCII

Pentru a intelege mai bine, studiati urmatorul exemplu. Aici este folosita de doua ori metoda "eval()", acesta transforma si interpreteaza argumentul primit in cod JavaScript.

<script type="text/javascript">

function calculeaza(form) {

  form.rezultat.value = eval(form.expresie.value);

}

eval("alert('Bine ati venit pe site!')");

</script>

<form>

  <p>Introduceti o expresie matematica (adunare, scadere, inmultire, impartire), de exemplu (7*8 sau 3+8/2): </p>

  <input type="text" name="expresie" size="35" >

  <input type="button" name="calc" value="Calculare" onclick="calculeaza(this.form)">

  <br>

  Rezultatul este:

  <input type="text" name="rezultat" size="18">

</form> Acest cod afiseaza la inceput o fereastra Alert apoi in browser va fi afisat urmatorul rezultat:

Dupa apasarea butonului "Calculare", prin "onclick" este accestata functia "calculeaza()". Scriptul JavaScript din HEAD, transfera in campul cu nmele "rezultat", din FORM, valoarea obtinuta prin evaluarea expresiei adaugate in campul "expresie", calcularea expresiei fiind posibila datorita folosirii metodei "eval()".

JavaScript - Obiectele javascript (part11)

Obiectele Java Script - 1


Pentru inceput trebuie sa stiti ce sunt obiectele in programare si care sunt conceptele fundamentale ale programarii orientate spre obiecte (OOP).
JavaScript nu este un program orientat pe obiecte (OO), cum sunt C++ sau Java, dar este bazat pe obiecte.
In lumea din jurul nostru obiectele sunt de exemplu: o carte, o masina, un televizor; in JavaScript obiectele sunt de exemplu: un formular, o fereastra, butoane, imagini ...

Toate elementele dintr-o pagina sunt vazute de JavaScript ca fiind obiecte.
Obiectele au anumite proprietati, de exemplu in lumea reala televizoarele au butoane, masinile au roti; asa si in JavaScript obiectele au proprietati: formularele au buton, ferestrele au titluri.

Pe langa obiecte si proprietati, in JavaScript avem si termenul "metode".

Metodele reprezinta functiile pe care un obiect poate sa le faca. Ferestrele se deschid cu metoda "open()", butoanele au metoda "click()". Parantezele rotunde "()" arata ca se face referire la o metoda, nu la o proprietate.
Astfel, putem rezuma ca un obiect este o colectie de proprietati si functii (metode)

Sintaxa pentru folosirea obiectelor este:
obiect.prorietate
obiect.metoda()
- Punctul (.) se foloseste pentru a specifica detinatorul metodei sau proprietatii.
Obiectele din JavaScript le putem cataloga in trei categorii principale:
- Obiecte pe partea de client
- Obiecte pe partea de server
- Obiecte esentiale
Astfel avem mai multe tipuri de obiecte care pot fi folosite, pentru incepatori e bine de stiut in principal obiectele pe partea de client si cele esentiale, cum sunt: "string", "math" sau cele care vin de la etichetele HTML.
Mai multe astfel de obiecte pot forma o celula (o grupa) numita "clasa", astfel, diferite obiecte incorporate pentru o executie comuna formeaza un "set de clase" care se mai numeste si "biblioteca de clase", iar mai exact pentru limbajul JavaScript "biblioteca de obiecte JavaScript", si pot fi refolosite.
JavaScript are urmatoarele obiecte esentiale, predefinite:

1 - String
2 - Math
3 - Date
4 - Array
5 - Global
1. Obiectul string
String (sau sir) se foloseste pentru a prelua text.
Proprietatea acestui obiect este:
length - returneaza numarul de caractere dintr-un sir (string)
Metodele obiectului string sunt urmatoarele:
anchor() - Returneaza un sir ca si "anchor"
big() - Returneaza un sir cu text mare
blink() - Returneaza un sir care clipeste
bold() - Returneaza un sir cu litere ingrosate
charAt() - Returneaza un caracter de la pozitia care este specificata
charCodeAt() - Returneaza codul ASCII al unui caracter de la o pozitie specificata
concat() - Returneaza doua siruri concatenate
fixed() - Returneaza un sir cu caractere tip
fontcolor() - Returneaza un sir cu o culoare specificata
fontsize() - Returneaza un sir cu litere de o anume marime
fromCharCode() - Returneaza valoare Unicode a unui caracater
indexOf() - Returneaza pozitia primei aparitii a unui subsir in un sir, sau daca subsirul nu e gasit, valoarea -1
italics() - Returneaza un sir in italic (scris aplecat)
lastIndexOf() - Returneaza pozitia primei aparitii a unui subsir in un sir, sau daca acesta nu e gasit, -1 (Importanr: se incepe din dreapta sirului spre stanga)
link() - Returneaza un sir ca hyperlink
match() - Similar cu indexOf si lastIndexOf, dar aceasta metoda returneaza sirul specificat sir, sau "null", in locul unor valori numerice
replace() - Inlocuieste intr-un sir unele caractere specificate cu altele noi specificate.
search() - Returneaza un numar intreg daca sirul contine caracterele specificate, altfel returneaza -1
slice() - Returneaza un sir incepand de la pozitia index specificata
small() - Returneaza un sir cu caractere mai mici
split() - Imparte un sir in mai multe siruri, in functie de caracterele specificate
strike() - Returneaza un sir taiat cu o linie la mijloc
sub() - Returneaza un sir ca indice
substr() - Returneaza un subsir specificat astfel, exemplu: 12,8 returneaza 8 caractere, incepand de la caracterul al 12-lea (se incepe de la 0)
substring() - Returneaza un subsir specificat astfel, exemplu: 8,12 returneaza toate caracterele, incepand de la caracterul al 8-lea, pana la al 12-lea
sup() - Returneaza un sir ca putere (superscript)
toFixed(n) - Returneaza sirul numeric rotunjindu-l la o valoare cu 'n' zecimale
toLowerCase() - Converteste un sir in litere mici
toUpperCase() - Converteste un sir in litere mari
In continuare este prezentat un exemplu in care se foloseste proprietatea "length" pentru a afla cate elemente are un sir si metoda "indexOf" prin care verificam daca un sir dat contine un anumit cuvant specificat. Daca este gasit cuvantul, se returneaza pozitia primei litere din el, in caz contrar apare mesajul "Cuvantul nu a fost gasit"
<script type="text/javascript">
var str="MarPlo.net - Cursuri, Jocuri si Anime"
document.write(src+"<br />")
document.writeln("Acest sir are "+ str.length + " caractere")
var pos=str.indexOf("Jocuri")
if (pos>=0) {
document.write("Jocuri incepe de la pozitia: ")
document.write(pos + "<br />")
}
else
{
document.write("Cuvantul nu a fost gasit!")
}
</script> Primului caracter din sir are pozitia 0, al doilea caracter are pozitia 1, si tot asa ....
Dupa ce este adaugat intr-un document HTML, acest script va afisa in pagina urmatorul rezultat:

MarPlo.net - Cursuri, Jocuri si Anime
Acest sir are 37 caractere Jocuri incepe de la pozitia: 22
- Iata un alt exemplu in care este foloseste metoda replace().
Avem un sir din care vom pastra doar numerele, eliminand toate celelalte caractere.
<script type="text/javascript">
<!--
var sir = 'Un sir test: 123ab 78%';
var sablon = /\D/g;             // \D este echivalent cu [^0-9] iar /g determina urmarirea sablonului in tot sirul
sir = sir.replace(sablon, '');
document.write(sir);
//-->
</script> - In acest exemplu avem variabila "sir" ce contine sirul complet si o variabila "sablon" ce contine o expresie regulata care reprezinta toate caracterele non-numerice, \D fiind echivalent cu [^0-9] (mai multe detalii despre expresiile regulate gasiti la: RegExp Javascript).
- Expresia sir.replace(sablon, '') inlocuieste cu '' (adica nimic) caracterele din "sir" care se incadreaza in "sablon".

- document.write(sir) va afisa sirul care a ramas, adica 12378

2. Obiectul Array (tablou sau matrice)
Obiectul Array (numit si matrice sau tablou de date) se foloseste pentru a stoca mai multe valori intr-un singur nume de variabila.

Fiecare valoare stocata devine un element al tabloului, acesta are asociat un "numar index" (sau cheie). Cu ajutorul acestei chei se poate face referire la oricare element din tablou.

Cu operatorul new se poate crea o "instanta" (incepere) a obiectului Array, ca in exemplul urmator:

var nume_colegi = new Array(4)

- Unde intre parantezele rotunde este trecut numarul de elemente ale tabloului, aici 4.

Numarul de elemente, cheile, incep implicit de la 0.

Pentru a da valori elementelor din tablou, se scrie numele tabloului urmat de o pereche de paranteze patrate, in interiorul carora se adauga cheia specifica fiecarui element, apoi semnul egal si valoarea dorita. Dupa cum puteti vedea in urmatorul exemplu:

nume_colegi[0] = "Cristi"

nume_colegi[1] = "Ion"
nume_colegi[2] = "Simona"

nume_colegi[3] = "Adi"

Sau puteti scrie si astfel:

var nume_colegi = Array('Cristi', 'Ion', 'Simona', 'Adi');

- In cazul acesta cheile se subanteleg si sunt aceleasi ca in prima varianta, incepand cu 0.

Pentru a face referire la un anumit element din tablou si pentru a extrage anumite valori din Array, se scrie numele tabloului si intre parantezele patrate cheia specifica acelui element; ca in exemplul urmator:

coleg = nume_colegi[0]

colega = nume_colegi[2]

Astfel, variabila "coleg" va avea valoarea "Cristi" si variabila "colega" valoarea "Simona".

Pentru a afla numarul de elemente ale unui Array, se foloseste proprietatea "length", ca in exemplu urmator:

nr_colegi = nume_colegi.length

Obiectul Array are urmatoarele metode:

concat() - Returneaza un tablou rezultat din concatenarea a doua tablouri

join() - Returneaza un tablou format din toate elementele unui tablou concatenat

reverse() - Returneaza inversul unui tablou

slice() - Returneaza o parte specificata a unui tablou

sort() - Returneaza tabloul ordonat

Urmatorul exemplu foloseste o instructiune "for" care parcurge un tablou (aici tabloul "nume_colegi"), extrage valoarea fiecarui element si o afiseaza.

<script type="text/javascript">

<!--

var nume_colegi = new Array();
nume_colegi[0] = "Cristi";

nume_colegi[1] = "Ion";

nume_colegi[2] = "Simona";

nume_colegi[3] = "Adi";

var nr_elemente = nume_colegi.length;           // Afla nr. elemente din matrice

document.write("Afiseaza numele fiecarui coleg: <br />");

for (i=0; i<nr_elemente; i++) {

    document.write(nume_colegi[i] + "<br />");

}

//-->

</script> - Am definit variabila "nr_elemente" pentru a afla numarul de elemente din matrice, pentru a-l folosi cu instructiunea "for". Este utila aceasta metoda deoarece de multe ori putem lucra cu matrici ale caror nr. de elemente nu-l stim exact. - In pagina HTML va fi afisat urmatorul rezultat:
Afiseaza numele fiecarui coleg:

Cristi
Ion
Simona
Adi

Iata un alt exemplu din care puteti intelege cum se aplica metoda "sort()" si efectul acesteia. Folosim acelasi exemplu de mai sus.
"sort()" sorteaza elementele din Array in ordine alfabetica (sau crescatoare in cazul valorilor numerice).
<script type="text/javascript">
<!--
var nume_colegi = new Array();
nume_colegi[0] = "Cristi";
nume_colegi[1] = "Ion";
nume_colegi[2] = "Simona";
nume_colegi[3] = "Adi";
var nr_elemente = nume_colegi.length;             // Afla nr. elemente din matrice
nume_colegi.sort();             // Aranjeaza elementele in ordine crescatoare, alfabetic
document.write("Afiseaza numele in ordine alfabetica: <br />");
for (i=0; i<nr_elemente; i++) {
    document.write(nume_colegi[i] + "<br />");
}

//-->

</script> - In pagina HTML va fi afisat urmatorul rezultat:

Afiseaza numele in ordine alfabetica:
Adi
Cristi
Ion
Simona

Incercati sa creati mici exemple in care sa lucrati si cu alte tabele (create de dv.) asi instructiuni.

JavaScript - Functii2 (part10)

  Functii - 2

In aceasta lectie vor fi prezentate trei exemple de scripturi care folosesc functii mai complexe decat cele prezentate in lectia anterioara.
1. Modificarea numarului argumentelor
Cand creem o functie ii definim si numarul de argumente pe care le accepta, lucru de care se tine cont in momentul apelarii ei.

Sunt situatii in care dorim sa transmitem functiei un numar diferit de argumente, care poate fi mai mic sau mai mare decat numarul de argumente pe care le are functia la construirea ei.
 
Intr-o astfel de situatie putem folosi o valoare prestabilita in interiorul functiei, pentru cazul in care nu sunt transferate argumente.

In continuare va fi prezentat un script care afiseaza un mesaj de salut atunci cand utilizatorul ajunge la o pagina web. Programul afiseaza un anumit mesaj daca recunoaste sau nu numele vizitatorului. Daca "utilizator" nu este "null" variabila a fost definita. Acest lucru este posibil doar daca o valoare, ca " Media", este transferata functiei. Daca variabila "utilizator" este egal cu "null" atunci scriptul evita folosirea variabilei in mesajul de salut.
 
<html>

<head>

    <script type="text/javascript">

    <!--

        function mesaj(utilizator) {

            if (utilizator!=null) {

                document.writeln("Salut "+utilizator);

            }

            else {

                document.writeln("Bine ati venit pe site!");

            }

        }

    //-->

    </script>

</head>

<body>
 
<script type="text/javascript">

<!--

    document.writeln("Prima apelare a functiei mesaj() <br />");

    mesaj("Media");

    document.writeln("<br />A doua apelare a functiei mesaj() <br />");

    mesaj();

//-->

</script>
</body>

</html> Acest script va afisa in pagina urmatorul rezultat:

Prima apelare a functiei mesaj()

Salut Media

A doua apelare a functiei mesaj()

Bine ati venit pe site! - Studiati codul functiei si observati diferenta mesajelor din cele ddoua apelari.

In unele situatii unei functii ii sunt transferate mai multe argumente decat au fost specificate la crearea ei. Valorile argumentelor suplimentare nu sunt pierdute, acestea se stocheaza intr-un tablou (sau "matrice") numit "arguments" , care exista implicit pentru orice functie.

Toate argumentele sunt pastrate in acest tablou si pot fi extrase in interiorul corpului functiei.

Argumentele functiei "mesaj" sunt stocate in tabloul "mesaj.arguments". Stocarea se face intr-o ordine asigurata de o "cheie" a carei prima valoare este 0.
 
Pentru a extrage primul element din tabloul "arguments" al functiei "mesaj" folosim sintaxa "arg1 = mesaj.arguments[0]", pentru al doilea "arg2 = mesaj.arguments[1]".
 
Toate tablourile JavaScript sunt indexate pornind de la 0. Pentru a gasi numarul total de argumente din tablou putem folosi o instructiune speciala "length" care returneaza lungimea (nr. de elemente) unui tablou (numit si "matrice").

Urmatorul exemplu atribue variabilei "nrArg" o valoare care reprezinta numarul de argumente (elemente) din tabloul "mesaj.arguments":

nrArg = mesaj.arguments.length

Folosind instructiunile prezentate mai sus (legate de tabloul "arguments"), putem crea o noua versiune a scriptului din primul exemplu. Aceasta versiune raspunde mai corect in functie de cunoasterea sau nu a numelui utilizatorilor.

<html>

<head>

<script type="text/javascript">

<!--

function mesaj(utilizator) {

    if (utilizator!=null) {

        document.writeln("Salut "+utilizator);

    }

    else {

        document.writeln("Bine ati venit pe site");

    }

    numarArgumente=mesaj.arguments.length;
 
    if(numarArgumente>1) {

        for (var i=1; i<numarArgumente; i++) {

            document.writeln(mesaj.arguments[i]);

        }

    }

}

//-->

</script>

</head>

<body>
 
<script type="text/javascript">

<!--

var utilizator="Marius", extraMesaj="Bine ai revenit";

var utilizator2=null;

var extraMesaj1="Vrei sa devii membru ?";var extraMesaj2="Te poti inscrie online";

mesaj(utilizator,extraMesaj);

document.writeln("<hr>");

mesaj(utilizator2,extraMesaj1,extraMesaj2);

//-->

</script>
 
</body>

</html> Acest exemplu va afisa in pagina web urmatorul rezultat:

Salut Marius Bine ai revenit
 
Bine ati venit pe site Vrei sa devii membru ? Te poti inscrie online 2. Functii recursive
 
O functie JavaScript poate fi recursiva, adica se poate autoapela.

O metoda buna de a demonstra capacitatea recursiva a functiilor este rezolvarea unei ecuatii factoriale.

In exemplul urmator avem o functie JavaScript recursiva care afla factorialul unui numar precizat "n" (aici 7):
 
<html>

<head>

<script type="text/javascript">

<!--

document.writeln("Calculeaza factorialul de 7 prin functie recursiva")

function factorial(n) {

var rezultat;

if (n>0) {

rezultat = n*factorial(n-1);

}

else if (n==0) {

rezultat = 1;

}

else {

rezultat = null;

}

return(rezultat)

}

//-->

</script>

</head>

<body>

<form>

<input type = "button" value = "Factorial 7" onclick="alert(factorial(7))" >

</form>

</body>

</html> In fereastra browser-ului va apare urmatorul rezultat:
- Functia verifica intai daca "n" este mai mare decat 0, apoi in caz afirmativ, "n" se inmulteste cu rezultatul returnat de auto-apelarea functiei cu argumentul "n-1". Cand "n" ajunge 0, aparitia cea mai imbricata a functiei se incheie si returneaza prima valoare. JavaScript incheie fiecare functie imbricata pana ce ajunge la apelarea initiala a functiei "factorial", apoi intoarce rezultatul final.