Считаете ли вы, что этих функций достаточно для предотвращения XSS, если они используются для фильтрации пользовательского ввода? И действительно ли мне делать свои собственные или использовать XSS-библиотеки? Дайте мне, пожалуйста, конструктивную критику. Всем спасибо.
/**
* Escape HTML string to prevent XSS.
*/
export const escapeHtml = (string: string): string => {
if (isString(string)) {
const entityMap = {
"&": "&",
"<": "<",
">": ">",
'"': """
};
return string.slice(0, string.length).replace(/[&<>"]/g, (s: string): string => entityMap[s]);
}
return string;
};
/**
* Loop over Object to escape each of its value to prevent XSS.
*/
export const escapeHtmlQueryObject = (obj: { [string]: string }): { [string]: string } => {
let result = obj;
if (obj && isObject(obj)) {
result = Object.keys(obj).reduce((res: { [string]: string }, key: string): {
[string]: string
} => {
res[key] = escapeHtml(obj[key]);
return res;
}, {});
} else if (process.env.NODE_ENV !== "production" && process.env.NODE_ENV !== "test") {
console.error(`FilterXSSQueryObject can't process ${obj.toString()}`);
}
return result;
};