diff --git a/application/utils.inc.php b/application/utils.inc.php
index e8792cf46..f24fbf0d1 100644
--- a/application/utils.inc.php
+++ b/application/utils.inc.php
@@ -1017,16 +1017,11 @@ class utils
/**
* Get the _SESSION variable for logging purpose
- * @return false|string
+ * @return string
*/
public static function GetSessionLog()
{
- ob_start();
- print_r($_SESSION);
- $sSessionLog = ob_get_contents();
- ob_end_clean();
-
- return $sSessionLog;
+ return print_r($_SESSION, true);
}
static function DebugBacktrace($iLimit = 5)
diff --git a/js/components/breadcrumbs.js b/js/components/breadcrumbs.js
index a6e9c0200..cbf78b601 100644
--- a/js/components/breadcrumbs.js
+++ b/js/components/breadcrumbs.js
@@ -92,14 +92,13 @@ $(function()
if (sTitle.length == 0) {
sTitle = sLabel;
}
+ sTitle = SanitizeHtml(sTitle, false);
+ sLabel = SanitizeHtml(sLabel, false);
- if ((this.options.new_entry !== null) && (iEntry == aBreadCrumb.length - 1))
- {
+ if ((this.options.new_entry !== null) && (iEntry == aBreadCrumb.length - 1)) {
// Last entry is the current page
sBreadcrumbsItemHtml += ''+sIconSpec+''+sLabel+'';
- }
- else
- {
+ } else {
var sSanitizedUrl = StripArchiveArgument(oEntry['url']);
sBreadcrumbsItemHtml += ''+sIconSpec+''+sLabel+'';
}
diff --git a/js/utils.js b/js/utils.js
index 32d03ed0a..00ebef10a 100644
--- a/js/utils.js
+++ b/js/utils.js
@@ -681,19 +681,27 @@ function DisplayHistory(sSelector, sFilter, iCount, iStart) {
/**
* @param sValue value to escape
+ * @param bReplaceAmp if false don't replace "&" (can be useful when dealing with html entities)
* @returns {string} sanitized value, ready to insert in the DOM without XSS risk
*
- * @since 2.6.5, 2.7.2, 2.8.0 N°3332
+ * @since 2.6.5, 2.7.2, 3.0.0 N°3332
* @see https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html#rule-1-html-encode-before-inserting-untrusted-data-into-html-element-content
+ * @see https://stackoverflow.com/questions/295566/sanitize-rewrite-html-on-the-client-side/430240#430240 why inserting in the DOM (for
+ * example the text() JQuery way) isn't safe
*/
-function SanitizeHtml(sValue) {
- return (sValue+'')
- .replace(/&/g, '&')
+function SanitizeHtml(sValue, bReplaceAmp) {
+ var sSanitizedValue = (sValue+'')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/\//g, '/');
+
+ if (bReplaceAmp) {
+ sSanitizedValue = sSanitizedValue.replace(/&/g, '&');
+ }
+
+ return sSanitizedValue;
}
// Very simple equivalent to format: placeholders are %1$s %2$d ...