Plugin: facturacion_base

Buenas tardes,

Acabamos de encontrar un error relacionado con la seguridad de Apache/Httpd, el problema viene al usar la directiva php 'open_basedir' y con el plugin 'facturacion_base'.

Probablemente el código este intentando acceder a un directorio que no esta permitido por esta directiva (en este caso es el public_html y /tmp).

Aquí te dejo el error que da apache:

```
[Wed Jan 11 15:59:54.524643 2017] [:error] [pid 7377] [client 81.33.27.200:33420] PHP Warning: is_dir(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (/home/admin/web/comvirtud.com/public_html:/tmp) in /home/admin/web/comvirtud.com/public_html/plugins/facturacion_base/controller/base_wizard.php on line 284
[Wed Jan 11 15:59:54.524758 2017] [:error] [pid 7377] [client 81.33.27.200:33420] PHP Warning: require_once(/home/admin/web/comvirtud.com/public_html/plugins/facturacion_base): failed to open stream: Operation not permitted in /home/admin/web/comvirtud.com/public_html/plugins/facturacion_base/controller/base_wizard.php on line 302
[Wed Jan 11 15:59:54.524773 2017] [:error] [pid 7377] [client 81.33.27.200:33420] PHP Fatal error: require_once(): Failed opening required '/home/admin/web/comvirtud.com/public_html/plugins/facturacion_base/controller/..' (include_path='.:/usr/share/pear:/usr/share/php') in /home/admin/web/comvirtud.com/public_html/plugins/facturacion_base/controller/base_wizard.php on line 302
```

Y esta es la configuración de Apache relativa al error:
```
<Directory /home/admin/web/comvirtud.com/public_html>
AllowOverride All
Options +Includes -Indexes +ExecCGI
php_admin_value open_basedir /home/admin/web/comvirtud.com/public_html:/tmp
</Directory>

```

La parte de código que esta dando el problema es la siguiente:
plugins/facturacion_base/controller/base_wizard.php:281
```
/// leemos todos los controladores del plugin
foreach( scandir(__DIR__) as $f)
{
if( is_string($f) AND strlen($f) > 0 AND !is_dir($f) AND $f != __CLASS__.'.php' )
{
/// obtenemos el nombre
$page_name = substr($f, 0, -4);

/// lo buscamos en el menú
$encontrado = FALSE;
foreach($this->menu as $m)
{
if($m->name == $page_name)
{
$encontrado = TRUE;
break;
}
}

if(!$encontrado)
{
require_once __DIR__.'/'.$f;

```
Por lo que he estado viendo bastaría con que el bucle 'foreach( scandir...' tuviese una condición para que no escanee el directorio '..'. Quedaría algo como:

```
foreach( scandir(__DIR__) as $f)
{
if( $f != '..' AND is_string($f) AND strlen($f) > 0 AND !is_dir($f) AND $f != __CLASS__.'.php' )
{

```

Lo he testeado y parece que funciona.

Un saludo!

hace 9 meses   NeoRazorX   [admin]
OK, solucionado.
hace 8 meses   -   [cron]
[[Cerrado por inactividad]]
No se pueden hacer más comentarios. Mejor escribe una nueva pregunta

Financiación extra

14 patrocinadores

Este mes se han realizado un total de 14 aportaciones económicas para acelerar el desarrollo del proyecto.

34% Complete

170 € este mes. Puedes aumentar estas cifras ;-)

+5 € +4 votos

+25 € +20 votos




Soporte

FacturaScripts es software libre y gratuito, pero si lo que busca es asesoramiento y soporte profesional, use la sección soporte. Encontrará el partner apropiado para el trabajo apropiado.

  Soporte

O síganos en las redes sociales.





© 2013-2017 FacturaScripts