FacturaScripts  
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 3 meses   NeoRazorX   [admin]
OK, solucionado.
hace 2 meses   -   [cron]
[[Cerrado por inactividad]]
No se pueden hacer más comentarios. Mejor escribe una nueva pregunta

¿Necesita hosting?


Loading.es

Loading.es le ofrece hosting para FacturaScripts y/o su tienda online desde 3,90 € / mes, con servidores en España y copias de seguridad diarias.


VPS de alto rendimiento:

Linode

El dobre de RAM por el mismo precio.







© 2013-2017 FacturaScripts