Newsgroup: it.comp.www.php
Titolo: Quanto è *insicuro* l'uso di Eval?

Salve.
Il codice è quello che segue:
<?
   var $block_title, $block_code,$block_dir="/blocks/cx";
 
   if ( is_dir( $block_dir ) )
   {
      if( ( $dir_handle = opendir( $block_dir ) )
      {
        while( ( $file = readdir( $dir_handle ) ) !== false )
        {
          include ( &block_dir."/".$file );
          if ( isset( $block_title ) )
          {
             OpenTableTitle( $block_title );
          }
          else {
                 OpenTable();
               }
          eval( $block_code );
          CloseTable();
        }
      }
   }	
?>
Che "eval" sia intrinsecamente insicura, lo dò per scontato.
Quello che mi domando è: quanto è insicura nell'uso che ne faccio?
Considerate che comunque nei vari files poi ci saranno dei controlli di
sicurezza e che non è possibile aggiungerne come "utente" del CMS ma
solo via FTP.
Ah e, ovviamente, se vedete qualcosa di "storto" in quel codice...
ditemi tranquillamente quello che non va, perché sono qui per imparare.
Ciao,
Andrea

 solo via FTP.
Attento ai path. Con quel codice dovrai avere la directory blocks nella
root del filesystem (e non del sito, come penso tu voglia fare).
Se quei file non sono modificabili in alcun modo dall'utente, valgono le
considerazioni suddette, altrimenti hai comunque qualche rogna con
quell'include che potrebbe caricare codice arbitrario.
Bye.

 Bye.
Ciao,
Andrea

 sorgente leggibile?
Purtroppo non c'e`.
Usa var (che in PHP5 viene considerato "public"), ma tienine conto,
perche` probabilmente da PHP6 potrebbe non andare piu` il tuo codice.
 
Bye.

 Bye.
Andrea

 devono usarlo?
Stanno rivoluzionando diverse parti del linguaggio perche`,
obiettivamente, erano fatte maluccio. Infatti cambiano la major della
versione, proprio per sottolinearlo.
Si stanno comportando molto bene. Ho degli script in PHP3 che funzionano
ancora col 5. Se non usassero register_globals (non li ho scritti io e
purtroppo non ho il tempo materiale (e il pagamento del cliente) per
correggerli) e se non avessero avuto la sfiga di creare classi in PHP4 con
lo stesso nome di classi base del PHP5 (iterator, per esempio) darebbero
ancora meno problemi.
Stanno discutendo da oltre un anno come inserire i namespace senza rompere
la compatibilita`, e non sono ancora convinti. Dovrebbero uniformare i
nomi delle funzioni e non lo fanno proprio per non rompere col passato.
Insomma, non e` che da oggi a domani non ti va piu` niente, solo che ti
avvisano che alcune cose cambieranno. E di solito hai 1-2 anni di tempo
per adeguarti.
Quello che personalmente mi spiace e` che molti hosting non abbiano ancora
PHP5, visto che siamo alla 5.2 (che ha un sacco di cose utili, tipo la
(de)codifica json, per non parlare del nuovo modello a oggetti).
Purtroppo finche` non lo si trova negli hosting, il resto e` abbastanza
fermo, visto che pochi scrivono classi pubbliche (in PHPClasses ce ne sono
veramente poche per PHP5, e molti fanno la versione anche per il 4,
perdendo un sacco di tempo e ottimizzandole poco), e pochi adattano il
codice a PHP5.
Bye.

 Bye.
Andrea

 diventare un'altra cosa da imparare(nel senso "peggiore" del termine).
Infatti. Pero` possono essere utili in alcuni casi.
Si puo` ovviare facendoseli a mano nel nome delle classi. E` quello che
faccio io, separando i componenti con l'underscore. Per esempio ho il NS
"Cal" che mi fornisce classi per il calendario, che si chiamano
"Cal_Date", "Cal_Time", "Cal_DateTime", ecc.
Senza stare li` a fare
$d = new Cal:::Date
faccio
$d = new Cal_Date
e l'autoload si arrangia a prendere la classe in /classes/Cal/Date.php
E` un casino quando rifattorizzi, ma se progetti bene non e` poi tanto
complicato. :)
Bye.

 Bye.
Ciao,
Andrea

 progetti più corposi, insomma si perde più tempo.
Si`, se ne perde parecchio. Io, quando mi accorgo che qualcosa supera il
terzo livello di indentazione, ne faccio una funzione (o un metodo) e la
richiamo. Cosi` ho un sacco di funzioni, ma spesso mi torna utile anche
per altre cose.
Mi sa che abbiamo perso il filo del discorso... :)
 
Bye.

 Bye.
Ciao,
Andrea

(SNIP sproloquio cosmico)
Dicevo, nonostante questo, trovo l'uso di funzioni e del codice
autoesplicativo assolutamente una cosa positiva.
Purché non si esageri, appunto :D
Andrea

 serve, però se vuoi continuiamo in mail :D
No, in mail non seguirei piu` il discorso, e comunque riguarda la
programmazione in PHP. Quindi mi sono limitato a cambiare il subject,
visto che non parliamo piu` di sicurezza ed eval().
Inoltre potrebbe anche esserci qualcun altro che vuole dire la sua o che
e` interssato.
Bye.

 Bye.
Andrea

 Andrea
Cheers,
David
P.S.: dovevo rispondere ad entrambi... ma non sapevo se mandare doppio
post o cosa... seguite il livello di indentazione > / >>. ;)
-- 
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<

 desideri(con casi concreti, non fuffa) :D
Se non andiamo troppo OT, volentieri.
Io lo usavo alle superiori (Turbo Pascal), e poi, come dicevo, con E.
Personalmente non mi piace molto la rigidita` e la prolissita` delle
dichiarazioni. Stessi motivi per cui non mi piace Java, tra l'altro. E ho
paura che C++ sara` anche peggio, da quel poco che ho visto in giro.
Bye.

 Bye.
Andrea

 post o cosa... seguite il livello di indentazione > / >>. ;)
Io che sono sufficientemente "pazzo" da farlo, ho fatto due post :D
Andrea

 Andrea
Cheers,
David


 bastano? :D
Mi stai facendo passare la voglia... :)
Bye.
P.S.: Tra poco me ne vadoa casuccia. Poi non mi vedrere fino a lunedi`, a
meno che non mi salti il matto di collegarmi da casa con l'adsl che va
peggio di un modem 9.600...
Bye.

 Bye.
Andrea

 Andrea
Greets to both,


 David
Andrea

 David
Andrea

 monitor? <g>
Ne conosco di persone del genere (purtroppo)... :D
Ciau


Ah, un'altra cosina. Volevo solo ribadire questo link, che forse ti è
sfuggito: 
http://blog.marcocantu.com/blog/celentano.html
 :D
Andrea

 Ciau
Andrea

 ^_^
:)
(e inizia il festival delle faccine! :P)


 Boh, :)
Per la serie "una persona con le idee chiare" :D
Andrea

 Andrea
Saludos
David


 David
Andrea