riesgo de seguridad de require_once 'app / Mage.php'; en la raíz de Magento

12

Tengo un archivo en mi raíz de Magento que require_once 'app/Mage.php';me da acceso a las Mage::getStoreConfigvariables del sistema.

¿Esto causa un riesgo de seguridad? ¿Debo colocarlo en otra carpeta?

Este es mi archivo, /twitter.php :

<?php
require_once 'app/Mage.php';
Mage::app();
$consumer_key = Mage::getStoreConfig("Social/twitterapi/consumer_key");
$consumer_secret = Mage::getStoreConfig("Social/twitterapi/consumer_secret");
$oauth_access_token = Mage::getStoreConfig("Social/twitterapi/access_token");
$oauth_access_token_secret = Mage::getStoreConfig("Social/twitterapi/access_token_secret");
Acebo
fuente

Respuestas:

10

A menos que el script contenga medios para alterar el contenido en la instalación de Magento a través de algo como argumentos enviados al script, no, no veo que sea un riesgo de seguridad, lo que incluye Mage.phpes exactamente lo que hace index.php(también en la raíz web).

Jonathan Hussey
fuente
Gracias @Jonathan Hussey, que tiene sentido, no consideró que lo index.phpestaba usando
Holly
8

Para agregar un poco de paranoia adicional, puede cambiar la instrucción require para especificar el app/Mage.phparchivo usando una ruta absoluta del sistema de archivos, por lo que no se usa la ruta de inclusión PHP:

require __DIR__ . '/app/Mage.php';

O, en versiones de PHP inferiores a 5.3:

require dirname(__FILE__) . '/app/Mage.php';

El vector de ataque muy teórico es que un atacante puede manipular de alguna manera la ruta de inclusión de PHP y, por lo tanto, puede incluir app/Mage.phparchivos arbitrarios .

Vinaí
fuente
3

Si usted es el único que accederá a este archivo, ¿por qué no restringirlo por IP if($_SERVER['REMOTE_ADDR']=='your.ip.address.here')? He visto a muchos desarrolladores de magento que mantienen ese tipo de archivos en la raíz de Magento y hacen cosas relacionadas con el administrador sin ningún tipo de autenticación. Por ejemplo, fui a uno de mis amigos del sitio web de Magento y simplemente adiviné el archivo http://example.com/test.phpy me dio salida Mail sent!jajaja. Los desarrolladores también escriben cosas confidenciales para cambiar algunas tablas de la base de datos en scripts independientes, ya que quieren hacerlo de vez en cuando y no quieren crear un módulo para eso.

Sugeriría a cualquiera que cree ese tipo de archivos independientes que solo se les requiere, solo restrinja la IP, y una vez que su trabajo haya terminado en ese archivo, simplemente coloque una exit;encima del archivo. Solo mis 2 centavos.

Kalpesh
fuente
1

Credo Bratton, siempre será arriesgado llamar a este tipo de código. Como llama a Mage.php desde twitter.php, debe hacerlo put proper file permission for twitter.php. O bien, cualquier otro usuario puede reescribir su código de twitter.php.Other wise it does not create any issue.

Amit Bera
fuente
Los permisos de archivo estándar de 644 para este archivo deberían estar bien. Recuerde también que los archivos PHP solo necesitan permiso de lectura para el usuario del servidor web, por lo que si desea aprovechar esto para restringir la edición del archivo por el motivo que sea, entonces podría hacerlo.
Jonathan Hussey
Gracias @JonathanHussey ... por tu consejo
Amit Bera
2
¿Por qué? ... no pude votar. ¿Puedo explicar?
Amit Bera
Odio cuando no explican el voto negativo.
reciclado
Esto necesita alguna aclaración, podría entenderse fácilmente mal: 1) "usuario" en este contexto significa un usuario en el servidor, es decir, alguien que ya tiene acceso al servidor. 2) esto no está relacionado en absoluto con el hecho de que el archivo incluye Mage.php. Si alguien tiene acceso a su servidor y puede escribir archivos, podría agregar el código en cualquier archivo (o crear uno nuevo, por ejemplo, en / media, que a menudo se establece en 777)
Fabian Schmengler