Engañar __autoload PHP en cargar los archivos de otros

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Diciembre 1st, 2009, 8:41 am

Considere la siguiente estructura de directorios.

Código: [ Select ]
test.php
class.php
test/class.php
  1. test.php
  2. class.php
  3. test/class.php


Considere el siguiente código.

PHP Código: [ Select ]
<?php
 
function __autoload($classname)
{
   include("test/$classname.php");
}
 
$class = '../class';
 
$obj = new $class;
 
?>
  1. <?php
  2.  
  3. function __autoload($classname)
  4. {
  5.    include("test/$classname.php");
  6. }
  7.  
  8. $class = '../class';
  9.  
  10. $obj = new $class;
  11.  
  12. ?>


En el sistema que lo intenté, que se carga y ejecuta "class.php" en lugar de la intención de "prueba / class.php" antes de que se produce una excepción no fatal error de clase existente. __autoload no parece verificar la sintaxis correcta para un nombre de clase, como uno podría pensar.
Strong with this one, the sudo is.
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Diciembre 1st, 2009, 8:41 am

  • camperjohn
  • Guru
  • Guru
  • Avatar de Usuario
  • Registrado: Nov 28, 2004
  • Mensajes: 1127
  • Loc: San Diego
  • Status: Offline

Nota Diciembre 1st, 2009, 1:09 pm

Wow que es resbaladiza. Yo no soy un fan de la carga automática de características (que sugiere la mala planificación), pero esto es un fallo extraño.
Upload video and picture galleries at http://www.bodydot.com?post+upload+video+picture+gallery
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Diciembre 1st, 2009, 4:33 pm

Creo que las posibilidades de que alguien construya un nombre de clase dinámica con la entrada de usuario son bastante escasas, para empezar. Tengo la sensación de que si realmente sucedió sin embargo, que pasaría con alguien que también no fue desinfección de entrada muy bien. Similar a cómo a veces se ve algo como include ($ _GET [ "modo"]);

Ive crecido como la función __autoload, especialmente durante el desarrollo. Me permite lanzar simplemente archivos de clase en una carpeta y comenzar a usar la clase en todo el resto de la aplicación. Al parecer, para ayudar a mantener el tamaño de la aplicación de un "esqueleto" bastante pequeños también.
Strong with this one, the sudo is.

Publicar Información

  • Total de mensajes en este tema: 3 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC