[mirotlaksfu] - improve check XSS

هذا الالتزام موجود في:
Miroslav Pejic
2023-05-29 13:24:46 +02:00
الأصل 0a98854c64
التزام 10985d4b81

عرض الملف

@@ -7,27 +7,42 @@ const log = new Logger('Xss');
const checkXSS = (dataObject) => { const checkXSS = (dataObject) => {
try { try {
if (typeof dataObject === 'object' && Object.keys(dataObject).length > 0) { if (typeof dataObject === 'object' && Object.keys(dataObject).length > 0) {
const escapedObj = escapeObject(dataObject); let objectJson = objectToJSONString(dataObject);
const data = xss(JSON.stringify(escapedObj)); if (objectJson) {
log.debug('Check XSS done'); let jsonString = xss(objectJson);
return JSON.parse(data); let jsonObject = JSONStringToObject(jsonString);
if (jsonObject) {
log.debug('XSS Object sanitization done');
return jsonObject;
} }
}
}
if (typeof dataObject === 'string' || dataObject instanceof String) {
log.debug('XSS String sanitization done');
return xss(dataObject); return xss(dataObject);
}
log.warn('XSS not sanitized', dataObject);
return dataObject;
} catch (error) { } catch (error) {
log.error('Check XSS error', { error: error, data: dataObject }); log.error('XSS error', { data: dataObject, error: error });
return dataObject; return dataObject;
} }
}; };
function escapeObject(obj) { function objectToJSONString(dataObject) {
const escapedObj = {}; try {
for (const key in obj) { return JSON.stringify(dataObject);
if (obj.hasOwnProperty(key)) { } catch (error) {
const escapedKey = key.replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0'); return false;
escapedObj[escapedKey] = obj[key];
} }
}
function JSONStringToObject(jsonString) {
try {
return JSON.parse(jsonString);
} catch (error) {
return false;
} }
return escapedObj;
} }
module.exports = checkXSS; module.exports = checkXSS;