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

manus.reload_f74d39

ES  usuario


OFERTA

Plugin prestashop_micro

Financiación extra

23 patrocinadores

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

70% Complete

350 € este mes.

+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.

  Soporte

¿Desea ser distribuidor?

Si desa ser distribuidor oficial de FacturaScripts, comience hoy mismo el proceso.

  hágase partner

Redes sociales:

Puede encontrarnos en las principales redes sociales. Y también en google+.





© 2013-2017 FacturaScripts