XSS-защита HTML сущностей - PullRequest
       46

XSS-защита HTML сущностей

0 голосов
/ 03 августа 2020

Считаете ли вы, что этих функций достаточно для предотвращения XSS, если они используются для фильтрации пользовательского ввода? И действительно ли мне делать свои собственные или использовать XSS-библиотеки? Дайте мне, пожалуйста, конструктивную критику. Всем спасибо.

/**
 * Escape HTML string to prevent XSS.
 */
export const escapeHtml = (string: string): string => {
    if (isString(string)) {
        const entityMap = {
            "&": "&",
            "<": "&lt;",
            ">": "&gt;",
            '"': "&quot;"
        };
        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;
};

1 Ответ

0 голосов
/ 03 августа 2020

По сравнению с этот ответ , вы также можете избежать одинарных кавычек.

Тем не менее, если вы хотите убедиться, что ваш код безопасен, возможно, лучше положиться на библиотека, которая была протестирована экспертами по безопасности. Несвязано: кажется, что вы перебираете ключи объекта, чтобы получить доступ к его значениям окольным путем, используя Object.keys, но вы также можете просто использовать Object.values.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...