Mitä ovat type juggling haavoittuvuudet?
Staattisesti vs. Dynaamisesti tyypitetyt ohjelmointikielet
Staattisesti tyypitetyn ja dynaamisesti tyypitetyn ohjelmointikielten erot liittyvät siihen, miten ohjelmointikieli käsittelee muuttujien tietotyyppejä ja tarkistaa niiden yhteensopivuutta.
Staattinen tyypitys
Staattisesti tyypitetty ohjelmointikieli vaatii, että muuttujille määritellään tietotyyppi ennen niiden käyttöä. Tämä tarkoittaa, että ohjelmoijan on nimenomaisesti määriteltävä, millaista tietoa muuttuja voi sisältää. Jos yritetään käyttää muuttujaa tavalla, joka ei ole yhteensopiva sen tietotyypin kanssa, ohjelma antaa virheen. Esimerkki staattisesti tyypitetystä ohjelmointikielestä on Java:
1int muuttuja1 = 5;
2String muttuja2 = "5";
3
4boolean yhtaSuuri = muuttuja1 == muuttuja2; // aiheuttaa virheen jo koodieditorissa eikä koskaan päädy valmiiksi ohjelmaksiDynaaminen tyypitys
Dynaamisesti tyypitetyssä ohjelmointikielessä muuttujien tietotyypit määritellään automaattisesti suorituksen aikana niiden sisällön perusteella. Tämä tarkoittaa, että ohjelmoija voi käyttää muuttujia ilman ennakkoilmoitusta niiden tietotyypistä. Tämä voi antaa enemmän joustavuutta ohjelmoinnissa, mutta voi myös aiheuttaa vaikeuksia, jos tietotyypit eivät ole yhteensopivia ja ohjelma toimii odottamattomalla tavalla. Esimerkki dynaamisesti tyypitetystä ohjelmointikielestä on Python.
1muuttuja1 = "5"
2muuttuja2 = 5
3yhta_suuri = muuttuja1 == muuttuja2 # koodi suoriutuu mutta tulos on FalseTässä Python-esimerkissä koodi suoriutuu kyllä, mutta tulos on epätosi, "5" ei ole yhtäkuin 5. Tämä johtuu siitä, että vaikka Python on dynaamisesti tyypitetty, se on myös vahvasti tyypitetty, johon tulemme seuraavaksi.
Hakkeroinnin oppiminen alkaa tästä
Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.