2012-09-13 2 views
2

Nous utilisons des données de ressort, dont le but est de pouvoir utiliser simplement les interfaces fournies (comme par exemple CrudRepository) et de ne pas avoir à implémenter des éléments.Méthodes CRUD de données de ressort

Nous avons réalisé que nous devons prendre des mesures pour assurer que notre application:

  • échappe des caractères HTML illégaux tels que & <> " 'de l'entrée
  • a une protection contre les injections sql

et pour moi l'endroit le plus logique pour faire cela semble être quelque part haut dans les méthodes db génériques que tous nos repos partagent, mais comme ils ne sont pas implémentés partout dans notre code, je ne sais pas si cela déjà mis en œuvre dans les données du printemps ou non.

+0

printemps-Data- jpa prend soin de l'injection SQL pour vous En ce qui concerne la désinfection des entrées, le l'architecture habituelle est DAO/Services/Controllers, et je pense que l'entrée devrait être "traitée" dans les services. –

Répondre

8

Vous semblez mélanger deux préoccupations très différentes ici, donc nous allons les discuter séparément:

  1. La protection contre l'injection SQL se trouve dans la mise en œuvre ressort données SQL-ish correspondante: JDBC ou JPA; donc vous ne devriez pas avoir à vous en préoccuper. L'API générique n'expose pas tout ce qui est lié à cela simplement parce que c'est générique et que "l'injection SQL" sonne vraiment bizarre quand vous utilisez HBase, par exemple.

  2. Echapper à du contenu HTML est une toute autre chose car c'est une préoccupation de votre couche de présentation, pas votre couche de données. Ainsi, vous pouvez soit échapper l'entrée au moment de la validation, avant de l'envoyer au référentiel, soit désinfecter la sortie par la suite, lorsque vous souhaitez afficher les données stockées dans l'interface utilisateur.

Comme une note, HTML est juste l'un des formats que vos données peuvent être livrées en tant que. Si par la suite vous devez également produire du JSON ou du CSV, vous finirez par mélanger des échappements pour différents formats dans la base de données. C'est une raison évidente pour laquelle échapper ne fait pas partie de la couche DAO et pourquoi l'aseptisation de sortie est la manière sûre d'y aller.

+0

Merci, bonne réponse. OK, alors même si nous n'avons pas à nous soucier des injections sql, il y a toujours les caractères HTML illégaux qui s'échappent. Notre base de données contient déjà une entrée enregistrée contenant des caractères HTML illégaux. Nous allons essayer d'utiliser un script db pour se débarrasser d'eux. Quant à empêcher d'autres entrées de caractères illégaux, je ne sais pas où le faire. Je ne me soucie pas vraiment de la validation et d'informer les utilisateurs qu'ils ont des caractères illégaux dans leur entrée, je veux juste une méthode centralisée qui leur échappe. (= identifie et les remplace par des codes de caractères) Avez-vous des recommandations où le faire? – fred

+0

"Désinfection de sortie" signifie que vous n'avez pas besoin d'empêcher l'entrée de données HTML illégales dans votre base de données, mais que vous devez l'empêcher d'accéder au navigateur.Vous pouvez donc choisir de stocker les données telles qu'elles sont, mais de les prétraiter avant le rendu. –

+0

Une autre raison contre un script db: que se passe-t-il si vous trouvez un autre caractère illégal plus tard (que vous n'avez pas pris en compte lorsque vous avez écrit le script DB). Vous allez vous retrouver avec plusieurs scripts pour plusieurs "versions" de vos données. Si vous le désinfectez après l'extraction de la base de données, ce code peut être amélioré sans soucis pour les données stockées. –

0

Pour répondre à vos préoccupations au sujet escapes illegal HTML characters such as & < > " ' from input

Vous devriez envisager d'utiliser:

org.apache.commons.lang.StringEscapeUtils.escapeHtml(str) 

dans votre couche de service

pour plus d'informations sur cette classe, voir StringEscapeUtils JavaDocs

Questions connexes