我有一个类似的网络方法:
[WebMethod(EnableSession = true)]
public string some(string value)
{
Vote vote = new Vote();
vote.User.Id = ((User)Session["user"]).Id;
vote.User.Address = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
vote.value = "";
// store in the database, using GETDATE() to store the time.
return "ok";
}
它工作正常,我可以在会话中获取用户ID,并在httpcontext中获取用户ip。
今天,我找到了500行,如:
USER IP DATE
1456 0.0.0.0 2011-09-28 02:54:38.493
1456 0.0.0.0 2011-09-28 02:54:38.493
1456 0.0.0.0 2011-09-28 02:54:38.493
1456 0.0.0.0 2011-09-28 02:54:38.493
对我而言,这意味着有人正在使用机器人访问网络方法并进行随机投票,但我无法理解IP为什么会出现'0.0.0.0',该人如何绕过会话问题,以及该人如何能够在所有500行中获得相同的确切时间。有提示吗?
答案 0 :(得分:1)
看看this site,它会为您提供一些有关REMOTE_ADDR
无法始终有效的信息。建议首先检查Request.ServerVariables("HTTP_X_FORWARDED_FOR")
,如果失败,请检查REMOTE_ADDR。
答案 1 :(得分:1)
为了解决日期相同的原因,DateTime不是很精确。如果所有500个一次进入(500个请求),那么它可以很好地将它们标记为在DATETIME精度的粒度内具有相同的时间。
至于会话,他们只需要发回加密的cookie。这意味着他们登录,获取cookie,然后使用该cookie发送请求。