shell bypass 403
<?php
/**
* @package RSForm! Pro
* @copyright (C) 2007-2019 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
defined('_JEXEC') or die;
class RSFormProXLS
{
protected $file;
protected $title;
protected $rows = array();
public function __construct($title = '') {
$this->setTitle($title);
}
public function setTitle($title) {
$title = preg_replace("/[\\\|:|\/|\?|\*|\[|\]]/", '', $title);
$title = substr($title, 0, 31);
$this->title = $title;
}
protected function escape($string) {
return htmlspecialchars($string, ENT_COMPAT, 'UTF-8');
}
protected function addRow($values) {
$cells = array();
foreach ($values as $value) {
$cells[] = $this->addCell($value);
}
$this->rows[] = '<Row>'."\n".implode("\n", $cells)."\n".'</Row>';
}
protected function addCell($value) {
if (is_numeric($value)) {
$type = 'Number';
} else {
$type = 'String';
}
return '<Cell><Data ss:Type="'.$type.'">'.$this->escape($value).'</Data></Cell>';
}
public function open($file, $mode) {
// Create the file pointer.
$this->file = @fopen($file, $mode);
// File has been opened successfully.
if (is_resource($this->file)) {
// First time this file is opened, add the Workbook & Worksheet header.
if ($mode == 'w') {
$header = array(
'<?xml version="1.0" encoding="UTF-8"?>',
'<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">',
'<Worksheet ss:Name="'.$this->escape($this->title).'">',
'<Table>'
);
fwrite($this->file, implode("\n", $header)."\n");
}
return true;
} else {
return false;
}
}
public function write($data) {
foreach ($data as $k => $v) {
$this->addRow($v);
}
fwrite($this->file, implode("\n", $this->rows)."\n");
}
public function writeFooter()
{
// Nothing to write, finish up the Excel file.
$footer = array(
'</Table>',
'</Worksheet>',
'</Workbook>'
);
fwrite($this->file, implode("\n", $footer));
}
public function close() {
return fclose($this->file);
}
public function writeHeaders($headers) {
$this->addRow($headers);
}
}