Używam czeku z express-walidatora, aby sprawdzić poprawność wprowadzania użytkownika i zastanawiam się, czy mogę wykluczyć znaki z testu? mam

check("profile.about").trim().escape()

Który konwertuje jakieś znaki stosowane w HTML do ich równoważnych podmiotów HTML, ale powoduje niepożądane wyniki, jeśli użytkownik wchodzi do apostrofu. Czy jest jakiś sposób filtrowania apostrofy z metody escape()? Jeśli nie ma żadnych wskazówek, jak mogłem naśladować escape() i po prostu upuść '. Dzięki

1
PumpkinBreath 11 styczeń 2020, 18:58

1 odpowiedź

Najlepsza odpowiedź

Możliwe jest dodanie innego oprogramowania pośredniego natychmiast, aby to osiągnąć ...

unescape-middleware.js

module.exports = (escaped, char) => function (req, res, next) {
    unescapeCharacter(req.params, escaped, char);
    unescapeCharacter(req.query, escaped, char);
    unescapeCharacter(req.body, escaped, char);
    return next();
}

function unescapeCharacter (obj, escaped, char) {
    for (const key in obj) {
        // Replace the escaped version with the character
        obj[key] = obj[key].replace(new Regex(escaped, "g"), char);
    }
}

Jest to wtedy używane tak ...

app.js

const { check } = require("express-validator");
const unescape = require("./path/to/unescape/middleware.js");

app.get(
    "/some/route", 
    check("profile.about").trim().escape(), 
    unescape("'", "'"), 
    require("./path/to/router/handler.js")
);

Wierzę, że powinno rozwiązać ten problem ...

1
Kwame Opare Asiedu 11 styczeń 2020, 16:21