Pagerintas register_globals?

Žaidžiuosi dabar per atostogas šiek tiek su Perl ir PHP ;) Ypač man
Perle patinka „taint mode“, kuris tiesiog neleidžia naudoti
kintamųjų, gautų iš išorinės aplinkos – ar tai būtų per shellą
gauti kintamieji, ar GET/POST/COOKIE HTTP metodais gauti duomenys. PHP
šiuo atžvilgiu tik dabar susirūpino šiais dalykais (register_globals gi
būdavo On iki 4.2.0 versijos). O jeigu pasirašius savą
register_globals atitikmenį? Štai kas man gavosi:

<?php
    define("USE_GET", 1);
    define("USE_POST", 2);
    define("USE_COOKIE", 4);

    $USE_TYPE = array( 'integer' => '/(^\d+$)/',
               'hexstring' => '/(^[0-9A-Fa-f]+$)/',
               'raw' => '/(.*)/s');

    function use_variable($var, $regexp = 'raw', $source = 7)
    {
        if($regexp[0] !== '/') {
            global $USE_TYPE;
            $regexp = $USE_TYPE[$regexp];
        }
        if ($source & USE_GET) {
            preg_match($regexp, $_GET[$var], $o);
        } elseif ($source & USE_POST) {
            preg_match($regexp, $_POST[$var], $o);
        } elseif ($source & USE_COOKIE) {
            preg_match($regexp, $_COOKIE[$var], $o);
        }
        global $$var;
        $$var = $o[1];
    }

    use_variable('skaitmuo', 'integer');
    use_variable('skaitmuoblogas', 'integer');
    use_variable('hexas', 'hexstring');
    use_variable('hexasperpost', 'hexstring', USE_POST);
   
    print "Skaitmuo: $skaitmuo<br>";
    print "Skaitmuoblogas: $skaitmuoblogas<br>";
    print "Hexas: $hexas<br>";
    print "Hexasperpost: $hexasperpost<br>";
?>

Funkcija use_variable() „išvalo“
kintamuosius prieš padarydama juos globaliais. Tad jei kas bandys
padaryt kokią nors XSS ar SQL injection ataką, duomenys turėtų
būti geriau atsijojami. Na, bent jau teoriškai. Vat išsaugojus šį kodą
byloje test.php ir nuėjus adresu
test.php?skaitmuo=123&skaitmuoblogas=123a&hexas=123465789abCDE&hexasperpost=12346789A
turėtų spausdinti tik gerus dalykus ;)

Perlas gauna eilinį apdovanojimą, PHP portinamas į Parrot

use.perl.org
rašo, jog Linux Journal paskelbė
Perl5.8.0 geriausiu
programavimo įrankiu
. Atrodo niekam tai nesukėlė didelių
nusistebėjimų. Tarp kitų nugalėtojų yra ir OpenOffice.org, ir
PostgreSQL, Webmin, Mozilla1.4, iptables ir t.t

Tuo tarpu užtikau Sterling Hughes dienoraštyje straipsniuką apie tai,
jog jis pradėjo
portinti PHP į parrot platformą
. Parrot kada nors pakeis Zend
engine?