2011-02-17 11 views
5

Tengo un script de depuración público que me gustaría ejecutar solo en ciertos cuadros de desarrollo, esperaba hacerlo programáticamente dentro de este script, detectando el servidor ip o nombre-

Tengo una pregunta sobre la seguridad de $ _SERVER y $ _SERVER ['HTTP_HOST'] en particular.

De esto: http://shiflett.org/blog/2006/mar/server-name-versus-http-host entrada de blog He encontrado que esta var es bastante insegura, y no se puede confiar.

¿Cuál es la mejor forma de averiguar en qué recuadro se encuentra actualmente?

Pensé en usar ARCHIVO, ya que parece bastante seguro, pero no estoy seguro de tener suficiente información solo desde la ruta del archivo.

No necesito necesariamente el nombre del servidor, incluso la ip estaría bien.

gracias de antemano.

+0

+1 para un enlace a publicación de blog realmente interesante. – Jacob

Respuesta

0

¿Cuál es la mejor forma de averiguar en qué recuadro se encuentra actualmente?

$_SERVER["SERVER_NAME"] generalmente estará bien. Los problemas de seguridad que Chris describe necesitan circunstancias muy, muy específicas para funcionar.

$_SERVER["SERVER_ADDR"] sería una alternativa, también.

Aparte de eso, tendería a ir con __FILE__ si hay alguna posibilidad de obtener una pista de la ruta.

+0

¿Puedes hablar sobre las "circunstancias específicas" que la publicación del blog necesita para funcionar? Revisé brevemente sus ejemplos con curl (curl -H), y parecen funcionar exactamente como se anunciaron ... no se necesitan trucos especiales. – awongh

2

El mejor método es definir explícitamente la máquina colocando un archivo de configuración de entorno en él y la comprobación de que:

if (file_exists('environment.php')) { 
    include 'environment.php'; 
} 

Este archivo podría contener sólo el nombre de la máquina que está en, o configuración configuraciones como $debug = 0 o cualquier otra cosa que desee personalizar para máquinas específicas.

0

Puede usar exec() para ejecutar un comando de shell.

echo exec('hostname'); 

Esto puede obtener la dirección IP en OS X, puede ser una plataforma específica.

echo exec('ifconfig | grep "inet " | grep -v 127.0.0.1 | cut -d\ -f2'); 
2

La mejor manera? Depende del nivel de control que tenga en su entorno. Aquí hay algunas opciones:

  1. Establezca una variable de entorno a través del servidor web para indicar la casilla.

    if (getenv('env_server') == 'production') 
    

    Esto es bueno, ya que no hay archivos de los que deba preocuparse. Solo la configuración del servidor web.

  2. Establezca un archivo en un lugar "conocido" en el servidor y verifique que (un archivo para todo el servidor).

    require('/path/to/environment.php'); 
    

    Ese archivo debe definir una constante para determinar el entorno.

  3. Configure manualmente cada aplicación para el servidor. Esto es lo más fácil de hacer, ya que no requiere nada en el servidor, pero también es el menos conveniente ya que debe configurar manualmente cada instalación ...

  4. Dirección IP externa utilizada para llegar al sitio :

    $_SERVER['SERVER_ADDR']

    Esto es bueno, ya que no requiere ninguna configuración adicional en el lado del servidor. Pero requerirá que mantenga un mapa de todas las direcciones IP activas y los servidores a los que están vinculados (especialmente porque más de 1 IP puede apuntar al mismo servidor) ...

Cuestiones relacionadas