33 votes

Objectif de l'option "Interdire l'insécurité dans les expressions rationnelles" de JSLint

J'ai une ligne de code qui obtient l'erreur suivante lors de l'exécution par le biais de JSLint:

Lint at line 604 character 48: Insecure '^'.
numExp = parseInt(val[1].replace(/[^\-+\d]/g, ""), 10);

Cette erreur semble se référer à la description suivante de JSLint de la page d'option:

"true if . and [^...]  should not be allowed in RegExp literals.
These forms should not be used when validating in secure applications."

Je n'arrive pas à comprendre comment un côté client javascript de l'application peut vraiment être considéré comme sûr. Même avec le plus hermétique de la regex, il est toujours possible de tirer jusqu'à quelque chose comme firebug et modifier la variable de toute façon. La véritable entrée de validation doit être effectuée sur le serveur et le navigateur client doit probablement s'en tenir à la validation qui va gérer l'abus de votre utilisateur moyen.

Il est sûr d'ignorer cette erreur? Ai-je raté un angle là que ma demande sera d'insécurité en raison de validation d'entrée côté client?

30voto

Tomalak Points 150423

"Non sécurisé" signifie "non spécifique" dans ce contexte. Le point . et la gamme exclusive [^…] ne sont pas clairement la définition de ce que devrait être compensée par le regex. Pour des fins de validation, ce peut proposer le risque de succès de l'appariement des choses que vous ne pensez pas et ne veulent pas (pense: liste blanche vs black-listing).

Dans tous les cas, le point et la gamme exclusive sont valables parties d'une expression régulière, et s'ils le font ce dont vous avez besoin (comme dans ce cas), je pense que de l'avertissement que plus prudents.

Un utilisateur malveillant peut jouer avec votre page logique tout moment; l'avertissement est plus sur le fonctionnement normal de la page.

14voto

Michael Myers Points 82361

Tout ce qu'il essaie de vous dire, c'est qu'il est généralement préférable de spécifier ce qui peut être saisi plutôt que ce qui ne peut pas .

Dans ce cas, votre expression rationnelle supprime les caractères incorrects, il est donc prudent d'ignorer l'avertissement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X