2010-10-01 6 views
4

Je récupère l'adresse IP à des fins de suivi, ce n'est pas quelque chose que l'utilisateur ne saisit pas et n'est pas utilisé pour toute autre raison que de suivre combien de fois un utilisateur a été à un site.Pourquoi valider une adresse IP?

L'adresse est stockée dans une base de données et utilisée pour voir si le client a déjà été sur le site.

Donc la question est peut-on utiliser une adresse IP de manière malveillante? Autre que "spoofing".

+3

Validez maintenant, ne vous inquiétez pas plus tard. – Stephen

+1

Comment cette adresse IP est-elle obtenue? –

+0

C'est en C# donc j'utilise un Request.UserHostAddress –

Répondre

1

La plupart des raisons de la validation ne s'appliquent pas; l'IP proviendra d'une propriété Request construite à partir d'informations dans la connexion sous-jacente qui aura déjà été validée dans une large mesure et, par conséquent, alors qu'elle pourrait être usurpée, elle ne pourrait pas être considérée comme quelque chose qui n'est pas réellement une adresse IP .

Cependant, deux raisons demeurent. Le premier est que la méfiance à l'égard de la sécurité ne concerne pas seulement l'intention, mais aussi le succès. nous pouvons faire confiance à la couche qui nous donne l'adresse IP pour ne pas nous donner autre chose, mais nous ne pouvons pas forcément lui faire confiance pour réussir ses propres vérifications - peut-être qu'un jour, un exploit piratera cette couche pour passer autre chose. L'autre est qu'en fonction de ce que vous allez faire avec cette adresse IP, une adresse IP usurpée pourrait causer des dommages (cela nécessite une validation au-delà de la simple validation de l'IP est une adresse IP). Un contre-argument est que si tout ce que vous faites est la journalisation, alors tant que vous utilisez des approches normales pour assurer le formatage des données, la journalisation du code malveillant ne fera rien de méchant en soi.

Un contre-argument est que si la seule chose que vous faites est la journalisation aujourd'hui, cela peut ne pas être le cas plus tard dans la vie du projet.

Par conséquent, la validation est raisonnable à faire, bien que je ne paniquerais pas si je voyais quelqu'un ne pas le faire. Veillez à vous assurer que votre validation accepte les adresses IPv6; ils sont encore assez rares pour que vos tests ne puissent en utiliser aucun, mais assez communs (et de plus en plus courants) que vous les frapperez dans le code de production. Vous ne souhaitez pas bloquer les utilisateurs légitimes car vous rencontrez une adresse IPv6.

0

Je ne peux pas penser à un moyen d'injecter des caractères vilains, mais je suppose que c'est comment vous obtenez leur adresse IP.

Il est toujours préférable de ne jamais faire confiance à vos utilisateurs, en particulier si une base de données est impliquée.

1

Si vous ne validez pas les données que vous avez placées dans votre base de données, vous pourriez vous retrouver avec des données malveillantes (XSS, injection SQL, etc.).

Assurez-vous que les données sont propres avant de les placer dans une base de données, car vous ne savez pas à quoi elles serviront demain.

3

Je dirais que vous devez valider l'adresse IP avant d'être stocké dans la base de données parce que:

La récupération de requête HTTP et le stockage de base de données ne sera pas toujours près de l'autre dans le code. Ainsi, à un moment donné, quelqu'un pourrait appeler la méthode de stockage de la base de données en utilisant de mauvaises données. Si vous écrivez le code pour le valider maintenant, vous êtes moins susceptible de faire face à des problèmes dans le futur.

0

Si vous utilisez simplement l'adresse IP comme extraite de la requête, il n'y a rien à craindre. Le moment de commencer à réfléchir à la validation est de savoir si vous recevez du trafic via un serveur proxy et si vous souhaitez obtenir l'adresse IP de l'utilisateur plutôt que celle du serveur proxy.Ceci est géré par les serveurs proxy utilisant l'en-tête X-Forwarded-For, et ce est facilement usurpé, donc prenez n'importe quelle valeur ici avec une pincée de sel et un peu de validation.