LP: Security: sanitize params when executing converter

pull/4889/head
Angel Fernando Quiroz Campos 2 years ago
parent 6f32625a01
commit ed72914608
  1. 10
      main/lp/openoffice_document.class.php
  2. 15
      main/lp/openoffice_presentation.class.php
  3. 6
      main/lp/openoffice_text.class.php
  4. 6
      main/lp/openoffice_text_document.class.php

@ -70,8 +70,8 @@ abstract class OpenofficeDocument extends learnpath
if (!empty($size)) { if (!empty($size)) {
list($w, $h) = explode('x', $size); list($w, $h) = explode('x', $size);
if (!empty($w) && !empty($h)) { if (!empty($w) && !empty($h)) {
$this->slide_width = $w; $this->slide_width = (int) $w;
$this->slide_height = $h; $this->slide_height = (int) $h;
} }
} }
@ -106,6 +106,7 @@ abstract class OpenofficeDocument extends learnpath
$files = []; $files = [];
$return = 0; $return = 0;
$cmd = escapeshellcmd($cmd);
$shell = exec($cmd, $files, $return); $shell = exec($cmd, $files, $return);
if ($return != 0) { // If the java application returns an error code. if ($return != 0) { // If the java application returns an error code.
@ -211,7 +212,9 @@ abstract class OpenofficeDocument extends learnpath
$cmd .= ' -p '.api_get_setting('service_ppt2lp', 'port'); $cmd .= ' -p '.api_get_setting('service_ppt2lp', 'port');
// Call to the function implemented by child. // Call to the function implemented by child.
$cmd .= ' "'.$this->base_work_dir.'/'.$this->file_path.'" "'.$this->base_work_dir.'/'.$this->created_dir.'"'; $cmd .= ' "'.Security::sanitizeExecParam($this->base_work_dir.'/'.$this->file_path)
.'" "'
.Security::sanitizeExecParam($this->base_work_dir.'/'.$this->created_dir).'"';
// To allow openoffice to manipulate docs. // To allow openoffice to manipulate docs.
@chmod($this->base_work_dir, $permissionFolder); @chmod($this->base_work_dir, $permissionFolder);
@chmod($this->base_work_dir.'/'.$this->file_path, $permissionFile); @chmod($this->base_work_dir.'/'.$this->file_path, $permissionFile);
@ -221,6 +224,7 @@ abstract class OpenofficeDocument extends learnpath
$files = []; $files = [];
$return = 0; $return = 0;
$cmd = escapeshellcmd($cmd);
$shell = exec($cmd, $files, $return); $shell = exec($cmd, $files, $return);
// TODO: Chown is not working, root keep user privileges, should be www-data // TODO: Chown is not working, root keep user privileges, should be www-data
@chown($this->base_work_dir.'/'.$this->created_dir, 'www-data'); @chown($this->base_work_dir.'/'.$this->created_dir, 'www-data');

@ -247,16 +247,23 @@ class OpenofficePresentation extends OpenofficeDocument
public function add_command_parameters() public function add_command_parameters()
{ {
if (empty($this->slide_width) || empty($this->slide_height)) { if (empty($this->slide_width) || empty($this->slide_height)) {
list($this->slide_width, $this->slide_height) = explode('x', api_get_setting('service_ppt2lp', 'size')); list($w, $h) = explode('x', api_get_setting('service_ppt2lp', 'size'));
$this->slide_width = (int) $w;
$this->slide_height = (int) $h;
} }
return ' -w '.$this->slide_width.' -h '.$this->slide_height.' -d oogie "'.$this->base_work_dir.'/'.$this->file_path.'" "'.$this->base_work_dir.$this->created_dir.'.html"'; return ' -w '.$this->slide_width.' -h '.$this->slide_height.' -d oogie "'
.Security::sanitizeExecParam($this->base_work_dir.'/'.$this->file_path)
.'" "'
.Security::sanitizeExecParam($this->base_work_dir.$this->created_dir.'.html')
.'"';
} }
public function set_slide_size($width, $height) public function set_slide_size($width, $height)
{ {
$this->slide_width = $width; $this->slide_width = (int) $width;
$this->slide_height = $height; $this->slide_height = (int) $height;
} }
public function add_docs_to_visio($files = []) public function add_docs_to_visio($files = [])

@ -331,7 +331,11 @@ class OpenofficeText extends OpenofficeDocument
*/ */
public function add_command_parameters() public function add_command_parameters()
{ {
return ' -d woogie "'.$this->base_work_dir.'/'.$this->file_path.'" "'.$this->base_work_dir.$this->created_dir.'/'.$this->file_name.'.html"'; return ' -d woogie "'
.Security::sanitizeExecParam($this->base_work_dir.'/'.$this->file_path)
.'" "'
.Security::sanitizeExecParam($this->base_work_dir.$this->created_dir.'/'.$this->file_name.'.html')
.'"';
} }
/** /**

@ -333,7 +333,11 @@ class OpenOfficeTextDocument extends OpenofficeDocument
*/ */
public function add_command_parameters() public function add_command_parameters()
{ {
return ' -d woogie "'.$this->base_work_dir.'/'.$this->file_path.'" "'.$this->base_work_dir.$this->created_dir.'/'.$this->file_name.'.html"'; return ' -d woogie "'
.Security::sanitizeExecParam($this->base_work_dir.'/'.$this->file_path)
.'" "'
.Security::sanitizeExecParam($this->base_work_dir.$this->created_dir.'/'.$this->file_name.'.html')
.'"';
} }
/** /**

Loading…
Cancel
Save