Commit 089ffdf 1 parent be65fbe commit 089ffdf Copy full SHA for 089ffdf
File tree 3 files changed +38
-2
lines changed
src/PhpSpreadsheet/Writer
tests/PhpSpreadsheetTests/Writer/Html
3 files changed +38
-2
lines changed Original file line number Diff line number Diff line change @@ -5,14 +5,15 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [ Keep a Changelog] ( https://keepachangelog.com )
6
6
and this project adheres to [ Semantic Versioning] ( https://semver.org ) .
7
7
8
- # TBD - 1.29.8
8
+ # 2025-01-11 - 1.29.8
9
9
10
10
### Deprecated
11
11
12
12
- Worksheet::getHashCode is no longer needed.
13
13
14
14
### Fixed
15
15
16
+ - Backported security patch for Html navigation.
16
17
- Change hash code for worksheet. Backport of [ PR #4207 ] ( https://github.com/PHPOffice/PhpSpreadsheet/pull/4207 )
17
18
- Retitling cloned worksheets. Backport of [ PR #4302 ] ( https://github.com/PHPOffice/PhpSpreadsheet/pull/4302 )
18
19
Original file line number Diff line number Diff line change @@ -563,7 +563,7 @@ public function generateNavigation()
563
563
$ html .= '<ul class="navigation"> ' . PHP_EOL ;
564
564
565
565
foreach ($ sheets as $ sheet ) {
566
- $ html .= ' <li class="sheet ' . $ sheetId . '"><a href="#sheet ' . $ sheetId . '"> ' . $ sheet ->getTitle () . '</a></li> ' . PHP_EOL ;
566
+ $ html .= ' <li class="sheet ' . $ sheetId . '"><a href="#sheet ' . $ sheetId . '"> ' . htmlspecialchars ( $ sheet ->getTitle () ) . '</a></li> ' . PHP_EOL ;
567
567
++$ sheetId ;
568
568
}
569
569
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ declare (strict_types=1 );
4
+
5
+ namespace PhpOffice \PhpSpreadsheetTests \Writer \Html ;
6
+
7
+ use PhpOffice \PhpSpreadsheet \Spreadsheet ;
8
+ use PhpOffice \PhpSpreadsheet \Writer \Html as HtmlWriter ;
9
+ use PHPUnit \Framework \TestCase ;
10
+
11
+ class NavigationBadTitleTest extends TestCase
12
+ {
13
+ public function testNavigationTitle (): void
14
+ {
15
+ $ spreadsheet = new Spreadsheet ();
16
+ $ sheet = $ spreadsheet ->getActiveSheet ();
17
+ $ sheet ->getCell ('A1 ' )->setValue (1 );
18
+ $ sheet2 = $ spreadsheet ->createSheet ();
19
+ $ sheet2 ->setTitle ('<img src=x onerror=alert(1)> ' );
20
+ $ sheet2 ->getCell ('A2 ' )->setValue (2 );
21
+
22
+ $ writer = new HtmlWriter ($ spreadsheet );
23
+ $ writer ->writeAllSheets ();
24
+ $ html = $ writer ->generateHTMLAll ();
25
+ $ expected = '<ul class="navigation"> '
26
+ . PHP_EOL
27
+ . ' <li class="sheet0"><a href="#sheet0">Worksheet</a></li> '
28
+ . PHP_EOL
29
+ . ' <li class="sheet1"><a href="#sheet1"><img src=x onerror=alert(1)></a></li> '
30
+ . PHP_EOL
31
+ . '</ul> ' ;
32
+ self ::assertStringContainsString ($ expected , $ html , 'appropriate characters are escaped ' );
33
+ $ spreadsheet ->disconnectWorksheets ();
34
+ }
35
+ }
You can’t perform that action at this time.
0 commit comments