gpt4 book ai didi

c# - Travian 更改村庄名称给 'Invalid Token' 与 webrequests

转载 作者:行者123 更新时间:2023-11-30 18:27:07 25 4
gpt4 key购买 nike

Travian 更改村庄名称给网络请求带来“无效 token ”

我正在尝试使用网络请求更改村庄名称。原始的网络请求是:

http://ts9.travian.com/ajax.php?cmd=changeVillageName

POST /ajax.php?cmd=changeVillageName HTTP/1.1
Host: ts9.travian.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0
Accept: text/javascript, text/html, application/xml, text/xml, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
X-Request: JSON
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Referer: http://ts9.travian.com/dorf1.php
Content-Length: 99
Cookie: sess_id=d6785b074b551c8f2bcdc31b7a314f9a; lowRes=0; T3E=jICvjEyjMlS3JAfAnZu%2FEA%3D%3D%3A6RoqZtSC3svl61Vi9hEBmO7xA0%2FJdL6xESd3tTKjvKM2UqoAiTf93aHbstIjJ0a7Yvf4c7vtp05Z4Kqm8Sg8OsJjM6waVRalUUKZWnU0fKHLqbvUcksUYSz2TKqMjhIgx8c6A9KRKyIvfdPOX7FffQ%3D%3D%3AP9Wn2BVlp9KeMlaOfyuG3ulblfv4%2BGhsswiIWeG5BNA%3D;travian_toggle=hero%3Aexpanded%2Cinfobox%3Aexpanded%2Cvillagelist%3Acollapsed; highlightsToggle=true
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
cmd=changeVillageName&name=SWAAGGERs%20village&did=39020&ajaxToken=6697441f78fefc90ca84c0e3891661cb
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 08 Dec 2014 10:31:54 GMT
Content-Type: application/json; charset=UTF-8;
Transfer-Encoding: chunked
Connection: keep-alive

响应是:

{
ajaxToken: null,
response: {"error":true,"errorMsg":"Token invalid","data":{"html":""}}
}

我发布请求的方式:

POST @ http://ts9.travian.com/ajax.php?cmd=changeVillageName
Data @ cmd=changeVillageName&name=ogdgpvqxf479&did=39020&ajaxToken=da56a3af2fc3cb6b629a091533d09e4e
REF @ http://ts9.travian.com/dorf1.php

我是否遗漏了什么? (如果我需要发布更多数据,如 cookie,我可以在需要时这样做)

ajaxToken 存储在 javascript 的 window.ajaxToken 中,但随每个请求一起发送。 ajaxtoken 设置在顶部的每个页面中

<script type="text/javascript">
window.ajaxToken = '4bf2392b506df3ebb1f4873a66f766d6';
</script>

编辑:我已经在我的浏览器中欺骗了这些网络请求使用的 cookie,并且我能够那样做......仍然没有弄清楚是什么原因造成的。

最佳答案

登录 session 通过 cookie 保存。因此,如果没有 cookie,服务器将无法判断将 HTTP 请求与哪个帐户相关联以及该用户是否已通过身份验证以更改给定村庄的名称。如果网络服务器不这样做,您就可以更改服务器上任何村庄的名称。

window.ajaxToken JavaScript 变量(这不是任何标准,只是这个特定网站所做的)用于防止 cross site request forgery .它也被称为 CSRF token 。

Web 服务器使用 CSRF token 为页面提供服务,但也在服务器上存储该 CSRF token 并将其与当前登录 session 相关联。每当服务器收到 AJAX 请求时,它都会使用 cookie 识别登录 session ,并通过检查 CSRF token 验证该请求是否来自它所服务的页面。

如果他们不这样做,其他网站就有可能在您不知情的情况下更改您的村庄名称。
假设我想通过将您的村庄命名为“我使用机器人和宏”来禁止您。在我的网站 getbannedfromtravian.com 上,我有这样的 JavaScript:

    $.post({
url: "http://ts9.travian.com/ajax.php?cmd=changeVillageName",
data: {
cmd=changeVillageName,
did=12345,
name="I use bots and macros"
}
});

当您访问我的网站时,此 JavaScript 将运行。您的浏览器会提供与 ts9.travian.com 关联的 cookie,包括您的登录 session 和请求。

但是,因为我没有提供服务器与登录 session 关联并在每个页面中提供服务的 CSRF token ,它知道此请求不是来自它提供的页面并且应该忽略它,让您的村庄名称保持不变。

关于c# - Travian 更改村庄名称给 'Invalid Token' 与 webrequests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27357425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com