【问题标题】:Authenticating POST requests验证 POST 请求
【发布时间】:2018-09-16 09:25:01
【问题描述】:

我正在创建一个 Tampermonkey 用户脚本,它从包含用户高分的网站发送 POST 请求。例如这样的事情:

$.post('https://example.com/scores', {
    id: 123, high_score: 999,
});

但是,问题是用户很容易伪造一个假分数并使用假的high_score 发送他们自己的 POST 请求。是否有办法以某种方式对这些请求进行身份验证,以便我可以区分来自用户脚本的真实请求和来自用户的伪造请求?也许一些加密/解密?

【问题讨论】:

  • 这不是普通的 javascript,而是 jQuery。你的答案可能是这样的:stackoverflow.com/questions/5507234/…
  • @nitobuendia 当然,post 请求是通过 jQuery 完成的;但是身份验证部分可以通过 javacript 完成,例如使用 vanilla javascript 创建一个加密令牌并将其传递给请求。我已经在这个问题中添加了 jquery 标记以避免混淆。
  • @rottenoats 这个页面有一个实际的游戏正在玩,这个页面上有一个返回用户高分的函数。我只是检索从函数返回的值并将其传递给 POST 请求。
  • 在写js的时候,你将无法完全让别人无法作弊。最好的办法是让它尽可能复杂。另外,谁真正在看 JS 扩展代码?您还可以检查游戏是否具有某种 API,您可以在其中检查“游戏 ID”是否对应于现有游戏。否则,只需让您的代码尽可能混乱。
  • 好的,明白了。感谢您的见解@rottenoats

标签: javascript jquery authentication post


【解决方案1】:

您可以在页面中添加一个隐藏输入,其中包含一个 nonce(数字仅在可以根据您使用的平台(唯一标识符)生成时使用)值,当您发送帖子时读取该值并添加它给您发布正文,在服务器端您检查数据库中是否存在此随机数,然后此帖子是真实的,否则不是。 在你的后端,如果你有会话,你可以用会话保存这个随机数,这是一个例子

<input type="hidden" value="your-nonce" id="your-id">

<script>
let nonce = $("#your-id").val();
$.post('https://example.com/scores', {
    id: 123, high_score: 999,nonce
});
</script>

【讨论】:

  • 如果我没记错的话,这不是他的网页。 Tapermonkey 是一个浏览器插件。
  • 是什么阻止了某人对此伪造请求?当然他们可以做$.post('https://example.com/scores', { id: 123, high_score: 999,$("#your-id").val()});,是的@rottenoats 没错。
猜你喜欢
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 2019-09-05
  • 2020-11-04
  • 1970-01-01
相关资源
最近更新 更多