Mitenkäs C :llä tehdään muuttujan muuttuja?
PHP:llä se menee näin
$a = 'hello';
$$a = 'world';
PHP:llä se menee näin
$a = 'hello';
$$a = 'world';
Turvaa tilisi vahvistamalla puhelinnumerosi. Voit silloin palauttaa unohtuneen salasanan tekstiviestillä.
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 10
Vanhimmat
char a = 'a';
char *b = &a;
Mutta eihän tuo ole sama asia.
Selitän vielä mitä tuo PHP-scripti tekee
$a = 'hello';
$$a = 'world';
tuolloin $hello muuttujassa on tuo world sana.
string hello("world");
En enää ihmettele miksi PHP:llä tehdyissä web-sovelluksissa on niin paljon aukkoja. Vaikuttaa kohtuullisen vaaralliselta ominaisuudelta ottaen huomioon missä kieltä käytetään.
http://en.wikipedia.org/wiki/Code_injection#Dynamic_Evaluation_Vulnerabilities_-_Dynamic_Variable_Evaluation
Hmmm... ei tuo toimine niinkuin pitää. Eikös tuo ole sama kuin string hello = "world";?
Tarkoitus on nimenomaan sama toiminta kuin
$a = 'hello';
$$a = 'world';
tuolloin $hello muuttujassa on tuo world sana.
ja kun tuota muuttaa
$a = 'muuttuja';
$$a = 'world';
tuolloin $muuttuja muuttujassa on tuo world sana.
"En enää ihmettele miksi PHP:llä tehdyissä web-sovelluksissa on niin paljon aukkoja. Vaikuttaa kohtuullisen vaaralliselta ominaisuudelta ottaen huomioon missä kieltä käytetään."
Niin no, empä sanoisi tuota mitenkään vaaralliseksi, jos muuttujat alustetaan niinkuin ne kuuluu jolloin mitään vaaraa ei ole. Siis samaa tasoa kuin register_global = on asetus. Tuolloin esim http://x.com?safevar=bad sijoittaa tuon bab sanan suoraan $safevar muuttujaan.
Suurinsyy miksi PHP:llä tehdyissä web-sovelluksissa on paljon aukkoja on että kieli on pintapuolisesti helppo oppia, jolloin huonoilla taidoilla ja tietoturvasta mitään tietämättä saa näkyvää aikases ja lähdetään tekemään isojakin sovelluksia.
Ihan yksinkertaisillakin jutuilla saa aukkoja aikases, esim aikoinaan kun Ylen sivut krakkeroitiin niin koodissa oli ihan include($_GET['sivu'] . '.php');
Toki PHP:ssä on moni asia huonosti ja pikkuhiljaa asiat korjaantuu joka taasen hajottaa huonosti tehtyjä scriptejä.
Eli halutaan määritellä muuttuja nimeltään hello, joka osoittaa merkkijonoon "world".
Onnistuu C:n johdannaisilla suoraan:
char *hello = "world";
Katso php tulkin c kielisestä koodista.
Suoraan se ei tule onnistumaan koska muuttujien nimet ovat vain apuna koodatessa.
Mutta käyttäen map luokkaa pääsee aika lähelle.
Esim.
map muuttujat;
muuttujat["a"] = "Hello";
muuttujat[muuttujat["a"]] = "World";
cout
Se tehdään paremmin. Jos annat jonkin esimerkin koodista, joka todella tarvitsee tätä ominaisuutta, voi kokenut C -ohjelmoija näyttää turvallisemman, toimivamman ja paremman tavan rakentaa tämä logiikka.