2010-10-01 89 views
4

我正在检索IP地址以进行跟踪,这不是用户既不输入也不用于除跟踪用户访问网站的次数之外的任何其他原因。为什么要验证IPAddress?

该地址存储在数据库中,用于查看客户端之前是否在该站点上。

所以问题是IP地址可以恶意使用吗?除了“欺骗”之外。

+3

立即确认,稍后再放心。 – Stephen 2010-10-01 21:16:44

+1

如何获得此IP地址? – 2010-10-01 21:34:20

+0

这是在C#所以我使用的是Request.UserHostAddress – 2010-10-01 21:42:11

回答

1

验证的大多数原因不适用; IP将来自一个Request属性,该属性由底层连接中的信息构建而成,这些信息已经在很大程度上进行了验证,因此虽然可能被欺骗,但它不能被伪造成实际上不是IP地址的东西。

但是,仍有两个原因。一个是,安全方面的不信任不只是意图,而且也是成功的;我们可以信任给予我们IP地址的图层,而不是故意给我们其他东西,但是我们不一定会相信它会在自己的检查中取得成功 - 也许有一天会发现一种利用这种技术来诡计的方法。另一个是,根据你要用这个IP做什么,也许欺骗性的IP可能会造成一些损害(这需要验证,而不仅仅是验证IP是IP)。

反说法是,如果您所做的只是记录,那么只要您使用常规方法来确保数据的格式化,记录恶意代码本身不会做任何讨厌的事情。

一个反驳的观点是,如果你现在唯一做的事情就是记录今天,那么在项目的整个生命周期中,这可能并非如此。

因此,总而言之,验证是合理的,尽管如果我看到有人没有这样做,我就不会吓坏了。

务必小心确保您的验证接受IPv6地址;它们仍然非常稀少,以至于您的测试可能不会使用任何测试,但足够常见(并且越来越常见),您将在生产代码中使用它们。您不希望因为遇到IPv6地址而阻止合法用户。

0

我想不出一种方式来注入任何顽皮的字符,但我想这是你如何得到他们的IP地址。

永远不要信任你的用户,尤其是涉及到数据库时。

1

如果您没有验证您放入数据库的数据,最终可能会收到恶意数据(XSS,SQL注入等)。

确保在将数据放入数据库之前数据是干净的,因为您不知道明天会使用什么。

3

我认为你应该验证IP地址被存储在之前的数据库,因为:

从HTTP请求和数据库存储检索并不总是相互靠近的代码。因此,在将来的某个时候,有人可能会使用错误的数据调用数据库存储方法。如果您现在编写代码来验证它,那么您将来不太可能处理问题。

0

如果您只是使用从请求中获取的IP地址,那么没有什么可担心的。开始考虑验证的时间是,如果您通过代理服务器获取流量,并且您想要用户的IP地址而不是代理服务器的IP地址。这是由使用X-Forwarded-For标头的代理服务器处理的,并且这个很容易被欺骗,所以在这里用一点盐和一点验证来取任何值。