为什么要验证IP地址?

时间:2010-10-01 21:15:50

标签: c# .net asp.net

我正在检索用于跟踪目的的IP地址,这不是用户既不输入也不是用于追踪用户访问网站的次数的任何其他原因。

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

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

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

然而,仍有两个原因。一个是对安全的不信任不仅仅是出于意图,也取决于成功;我们可以相信给我们提供IP地址的层不会故意给我们别的东西,但我们不一定相信它能在自己的检查中取得成功 - 也许有一天会发现一个利用这个层来传递其他东西的漏洞。另一个是,根据你要对这个IP做什么,也许一个欺骗性的IP可能会造成一些损害(这需要验证,而不仅仅是验证IP是IP)。

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

一个反反驳的论点是,如果你现在唯一要做的就是今天记录,这可能不是项目生命周期的后期。

因此,总的来说,验证是合理的,但如果我看到有人不这样做,我就不会惊慌失措。

请注意确保您的验证接受IPv6地址;它们仍然很少见,你的测试可能不会使用任何,但是在生产代码中你会发现它们很常见(而且越来越普遍)。您不希望因为遇到IPv6地址而阻止合法用户。

答案 3 :(得分:0)

我想不出一种方法可以注入任何顽皮的角色,但我想这就是你获取IP地址的方式。

最好永远不要相信您的用户,尤其是涉及数据库时。

答案 4 :(得分:0)

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