27 martie 2012

Form Spoofing in HTML

  Form spoofing este o metoda prin care un script poate primi o cerere falsificata, trimisa printr-un formular strain, din afara aplicatiei noastre, cu elemente diferite fata de cele presupuse initial, dar care au aceeasi denumire.

  De exemplu: presupunand ca intr-un formular avem un select, care la randul lui are cateva optiuni predefinite - daca se afla numele acestui select atunci cineva poate simula acest formular punand in el un input text cu acelasi nume ca si select-ul si cu orice valoare. Rezultatul este inconsistenta datelor.

  Solutie: atasarea la formular a unui input type hidden cu o valoare generata dinamic iar aceasta valoare sa fie, in plus, inclusa si in array-ul global $_SESSION , ca variabila ce tine de sesiunea curenta.

-----------------------  index.php


<?php
session_start();
$_SESSION['secret'] = md5(uniqid(mt_rand(), true));

// formularul corect
echo '    <form action="destinatie.php" method="POST">
    <select name="color">
        <option value="red">red</option>
        <option value="green">green</option>
        <option value="blue">blue</option>
    </select>
<input type="hidden" name="secret" value="'. $_SESSION['secret'] .'"/>
    <input type="submit" />
    </form> <p/><p/>';

// formularul falsificat
echo '<form action="destinatie.php" method="POST">
    <input type="text" name="color" />
    <input type="submit" />
<input type="hidden" name="secret" value="100"/>
      </form>';
?>

-------------------- destinatie.php


<?php
session_start();

if (isset($_POST['secret']) == false || $_POST['secret']!=$_SESSION['secret']) {
echo "form spoofing";
return ;
}

?>

  La destinatie se verifica daca in formular exista un element cu denumirea 'secret'. Acesta trebuie, in plus sa aiba aceeasi valoare cu $_SESSION['secret'], ceea ce inseamna ca sesiunea din care vine formularul este aceeasi cu cea a utilizatorului curent care a ajuns la destinatie. Pentru a evita orice fel de coincidenta, valoarea "secreta" care verifica egalitatea este un md5 al unui identificator unic bazat pe timpul curent in microsecunde, si prefixat cu  un numar random....

Porti elementare si implementarea lor in Icarus Verilog

1. Inversorul CMOS

module inversor(intrare, iesire);

    input intrare;
    output iesire;

    supply1 vdd;
    supply0 gnd;

    pmos p1(iesire, vdd, intrare);
    nmos n1(iesire, gnd, intrare);

endmodule

module test_inv;

    reg in1;
    wire out1;

    inversor inst1(in1, out1);

    initial begin
        in1 = 1'b0;
        #5   in1 = 1'b1;
        #10  in1  = 1'b0;
    end

    initial $monitor ($time, " out1=%b in1=%b",  out1, in1);

endmodule




2. CMOS AND gate

module and_cmos (in1, in2, out);

    input in1;
    input in2;
    output out;

    supply1 vdd;
    supply0 gnd;

    wire w1, w2;
   
    // stanga sus, au output in acelasi loc
    pmos pmos1(w1, vdd, in1);
    pmos pmos2(w1, vdd, in2);
   
    // stanga jos
    nmos nmos1(w2, gnd, in2);
    nmos nmos2(w1, w2, in1);
   
    // rezulta output
    pmos pmos3(out, vdd, w1);
    nmos nmos3(out, gnd, w1);
   
endmodule


module test_and;

    reg in1 = 0;
    reg in2 = 0;
    wire out;
   
    initial begin
        #5  in1 = 1'b1;
        #5 in2 = 1'b1;
        #5 in1 = 1'b0;
        #5 in2 = 1'b0;
    end
   
    and_cmos and1(in1, in2, out);
   
    initial
    $monitor($time," AND(in1, in2, out) = (%b, %b, %b)", in1, in2, out);

endmodule




3. CMOS OR gate

module or_cmos (in1, in2, out);

    input in1;
    input in2;
    output out;

    supply1 vdd;
    supply0 gnd;

    wire w1, w2;

    // stg sus
    pmos pmos1(w1, vdd, in1);
    pmos pmos2(w2, w1, in2);

    // stg jos
    nmos nmos1(w2, gnd, in1);
    nmos nmos2(w2, gnd, in2);

    // output
    pmos pmos3(out, vdd, w2);
    nmos nmos3(out, gnd, w2);

endmodule

module test_or;

    reg in1 = 0;
    reg in2 = 0;
    wire out;
   
    initial begin
        #5 in1 = 1'b1;
        #5 in2 = 1'b1;
        #5 in1 = 1'b0;
        #5 in2 = 1'b0;
    end
   
    or_cmos or1(in1, in2, out);
   
    initial
    $monitor($time," OR(in1, in2, out) = (%b, %b, %b)", in1, in2, out);

endmodule




4. CMOS XOR gate



module xor_cmos (in1, in2, out);

    input in1;
    input in2;
    output out;

    supply1 vdd;
    supply0 gnd;

    wire w1, w2;

    // dreapta
    pmos pmos1 (w1, vdd, in1);
    nmos nmos1 (w1, gnd, in1);

    // stanga
    pmos pmos3 (out, in1, in2);
    nmos nmos3 (out, w1, in2);

    // centru
    pmos pmos2 (out, in2, in1);
    nmos nmos2 (out, in2, w1);

endmodule

module test_xor;

    reg in1 = 0;
    reg in2 = 0;
    wire out;
  
    initial begin
        #5 in1 = 1'b1;
        #5 in2 = 1'b1;
        #5 in1 = 1'b0;
        #5 in2 = 1'b0;
    end
  
    xor_cmos xor1(in1, in2, out);
  
    initial
    $monitor($time," XOR(in1, in2, out) = (%b, %b, %b)", in1, in2, out);

endmodule


5. Poarta T-gate (Transmission Gate)

module tgate_cmos (in, A, out);

    input in;
    input A;
    output out;

    pmos pmos1 (out, in, ~A);
    nmos nmos1 (out, in, A);

endmodule

module test_tgate;

    reg in = 0;
    reg A = 0;
    wire out;
   
    initial begin
        #5 in = 1'b1;
        #5 A = 1'b1;
        #5 in = 1'b0;
    end
   
    tgate_cmos tgate(in, A, out);
   
    initial
    $monitor($time," TGATE(in, A, out) = (%b, %b, %b)", in, A, out);

endmodule


Semnificatie T-gate: compus dintr-un un tranzistor nmos si unul pmos,  cu A semnal de enable, aceasta poarta lasa sa treaca mai departe valoarea lui In, numai atunci cand A este activat, si blocheaza iesirea, in caz contrar.
  Cand A este 1, in pmos intra ~A adica 0, deci pmos-ul este inchis (conduce pe 0). La fel, in nmos intra 1 si acesta conduce. La In = 1, conduce pmos si out = 1, iar la In = 0, conduce nmos si out = 0.
  Cand A este 0, in pmos intra 1 si se deschide (nu mai conduce), iar in nmos intra 0 - idem. Rezulta ca la out va fi impedanta marita = z oricare ar fi intrarea In.

surse foto: http://www.allaboutcircuits.com/vol_4/chpt_3/7.html

25 martie 2012

Jeem: limbaj de programare in limba araba

Super super tare:

متغير
صحيح: رقم, ل, المجموع; #ش 
صحيح: ب, ت; #س
حقيقي: رقم حقيقي; #س
بداية
إمسح; #ش
إطبع("اهلا و سهلا", سطر, سطر,سطر);  # ش
إطبع("أدخل أي عدد صحيح بين 0 و 10 الحساب المجموع من 1 لذلك الرقم");  # ش 
إطبع(سطر);  # ش
   إطبع  ("و تحديد زوجي أو فردي, أو اي رقم غير ذلك للخروج من  البرنامج" , سطر); # ش
إطبع (سطر, "أدخل الرقم :") ;#ش
إقرأ (رقم); #ش

طالما ((رقم >= 0) و (رقم <=10)); #ش
بداية
تكرار ل من 1 إلى (رقم-1); #ش
 المجموع = المجموع + ل; #ش
إطبع (ل, "+"); #ش
نهاية; #ش

 إطبع (ل, "=", المجموع+ رقم)) #ش
إذا ((رقم مود 2) == 0) #ش
إطبع (سطر, "الرقم زوجي", سطر) # ش
وإلا
إطبع ("الرقم فردي", سطر) #ش
# ......

نهاية.#ش

In traducere proprie:

variabile
intregi:  raqam, L, almajmua;
intregi: B, T;
reale: raqam_haqiqi;

inceput
permite;
afiseaza ("bine ati venit", linie, linie, linie);
afiseaza ("introduceti orice numar intreg intre 0 si 10 .....");
afiseaza (linie);
afiseaza ("si determinati daca este par sau impar, sau altceva pentru a iesi din program", linie);
afiseaza (linie, "introduceti numarul");
citeste (raqam);

cat timp (raqam>=0 si raqam<=10);
inceput
pentru L de la 1 la raqam-1;
    almajmua = almajmua + L; 
    afiseaza (L, "+");
sfarsit;

afiseaza (L, "=" , almajmua + raqam);
daca (raqam modulo 2 == 0)
    afiseaza (linie, "numar par", linie);
altfel
    afiseaza ("numar impar" , linie)

sfarsit


P.S. Programul este incomplet.
Link de descarcare programul Jeem: http://www.jeemlang.com/index.php?page=downloads

22 martie 2012

La ce foloseste TS (Teoria Sistemelor)

  Unul dintre locurile unde îți poți aminti de ”TS” este în robotică, în control theory . De exemplu, având o mașinuță care se presupune că ar merge drept, de fapt, din cauza erorilor, traiectoria este mai mult sau mai puțin deviată (cross-track error - CTE). Pentru a o încadra cât de cât aproape de ceea ce se aștepta, se introduc celebrele compensatoare din capitolul de sinteza SRA, cum ar fi compensatorul P, PI, PD, PID, PDD, etc.

  Compensatorul de tip P - proportional control. A conduce proporțional cu eroarea CTE - deviația scade dar au loc frecvente depășiri - deci nu foarte exact.
  Compensatorul de tip PD - proportional derivative control. A conduce proporțional cu eroarea CTE plus adăugarea derivatei în timp a CTE (diferența a oricăror 2 erori consecutive între 2 momente de timp) înmulțită cu un parametru ales. Ca rezultat, eroarea devine mai mică cu trecerea timpului, fără depășiri (oscilații în jurul axei), o convergență mai bună.
  Compensatorul de tip PID - proportional, integral, derivative. La fel ca PD, plus adăugarea integralei CTE privită ca suma a tuturor valorilor CTE anterioare, înmulțită cu un parametru. PID rezolvă o problemă neadresată de PD și anume atunci când roțile mașinuței nu sunt perfect alineate și e nevoie de o ”forță mai mare” în conducere.

  Din punct de vedere euristic, valorile proporționale, integrale și derivative pot fi interpretate temporal. Astfel, P depinde de eroarea curentă, la momentul prezent, I depinde de acumularea erorilor trecute, iar D depinde de o predicție a viitorilor erori pe baza ratei de schimbare curentă. Foarte importantă este alegerea corectă a parametrilor.

graficul răspunsului unui sistem cu regulatoare P, PI și PID
PID-ul pare a fi cel mai bun stabilizator (cu deviații minime față de y=1 și convergență rapidă)

21 martie 2012

PHP: Transmiterea datelor

În formularele HTML se poate specifica ca atribut method - POST sau GET.

În GET: browserul direcționează către pagina specificată în atributul action, la care adaugă niște perechi de tip cheie-valoare. De exemplu:  script.php?id=1440&post=14. Transmiterea se face prin URL, vizibilă pentru utilizator. Accesul la date se face prin interogarea: $_GET ['nume_variabile'] (ex. $_GET['id'] )
În POST: browserul direcționează către pagina specificată în atributul action, dar nu adaugă perechile la URL (utilizatorul nu le mai vede), totuși acestea aflându-se în cererea HTTP în clar. Accesul la date: $_POST['nume_variabila'].
În plus, fără a folosi una din cele 2 metode, putem pune link la o pagină: script.php?id=1440

Sesiuni PHP  - mecanism pentru păstrarea informațiilor despre starea clientului.
session_start () este metoda care trebuie apelată în fiecare script, la început. Sesiunea se închide cu session_destroy(). Pentru transmiterea variabilelor se încarcă/descarcă super array-ul $_SESSION.

Cookies în PHP - un fișier trimis de server și salvat în calc. personal în care se pot stoca mai multe informații.
setcookie() este metoda care definește cookie-ul, care va fi trimis împreună cu antetele HTTP. Cookies trebuie trimise înainte de orice output (inclusiv etichete HTML). Variabilele vor fi descărcate prin $_COOKIE['nume_var'] sau $_REQUEST['nume_var'].