mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-12 19:16:45 +00:00
Merge commit from fork
This commit is contained in:
@@ -403,12 +403,12 @@ class Html extends BaseWriter
|
||||
} else {
|
||||
$propertyValue = (string) $propertyValue;
|
||||
}
|
||||
$html .= self::generateMeta($propertyValue, "custom.$propertyQualifier.$customProperty");
|
||||
$html .= self::generateMeta($propertyValue, htmlspecialchars("custom.$propertyQualifier.$customProperty"));
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($properties->getHyperlinkBase())) {
|
||||
$html .= ' <base href="' . $properties->getHyperlinkBase() . '" />' . PHP_EOL;
|
||||
$html .= ' <base href="' . htmlspecialchars($properties->getHyperlinkBase()) . '" />' . PHP_EOL;
|
||||
}
|
||||
|
||||
$html .= $includeStyles ? $this->generateStyles(true) : $this->generatePageDeclarations(true);
|
||||
@@ -1586,8 +1586,9 @@ class Html extends BaseWriter
|
||||
// Hyperlink?
|
||||
if ($worksheet->hyperlinkExists($coordinate) && !$worksheet->getHyperlink($coordinate)->isInternal()) {
|
||||
$url = $worksheet->getHyperlink($coordinate)->getUrl();
|
||||
$urldecode = strtolower(html_entity_decode(trim($url), encoding: 'UTF-8'));
|
||||
$parseScheme = preg_match('/^(\\w+):/', $urldecode, $matches);
|
||||
$urlDecode1 = html_entity_decode($url, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
|
||||
$urlTrim = preg_replace('/^\\s+/u', '', $urlDecode1) ?? $urlDecode1;
|
||||
$parseScheme = preg_match('/^([\\w\\s]+):/u', strtolower($urlTrim), $matches);
|
||||
if ($parseScheme === 1 && !in_array($matches[1], ['http', 'https', 'file', 'ftp', 's3'], true)) {
|
||||
$cellData = htmlspecialchars($url, Settings::htmlEntityFlags());
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Writer\Html;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Html as HtmlWriter;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class BadCustomPropertyTest extends TestCase
|
||||
{
|
||||
public function testBadCustomProperty(): void
|
||||
{
|
||||
$reader = new XlsxReader();
|
||||
$infile = 'tests/data/Reader/XLSX/sec-q229.dontuse';
|
||||
$spreadsheet = $reader->load($infile);
|
||||
$writer = new HtmlWriter($spreadsheet);
|
||||
$html = $writer->generateHtmlAll();
|
||||
self::assertStringContainsString('<meta name="custom.string.custom_property"><img src=1 onerror=alert()>" content="test" />', $html);
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Writer\Html;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Html as HtmlWriter;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class BadHyperlinkBaseTest extends TestCase
|
||||
{
|
||||
public function testBadHyperlinkBase(): void
|
||||
{
|
||||
$reader = new XlsxReader();
|
||||
$infile = 'tests/data/Reader/XLSX/sec-p66w.dontuse';
|
||||
$spreadsheet = $reader->load($infile);
|
||||
$writer = new HtmlWriter($spreadsheet);
|
||||
$html = $writer->generateHtmlAll();
|
||||
self::assertStringContainsString('<base href=""><img src=1 onerror=alert()>" />', $html);
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Writer\Html;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Html as HtmlWriter;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class BadHyperlinkTest extends TestCase
|
||||
{
|
||||
public function testBadHyperlink(): void
|
||||
{
|
||||
$reader = new XlsxReader();
|
||||
$infile = 'tests/data/Reader/XLSX/sec-j47r.dontuse';
|
||||
$spreadsheet = $reader->load($infile);
|
||||
$writer = new HtmlWriter($spreadsheet);
|
||||
$html = $writer->generateHtmlAll();
|
||||
self::assertStringContainsString("<td class=\"column0 style1 f\">jav\tascript:alert()</td>", $html);
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user