Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证POST请求_Javascript_Jquery_Authentication_Post - Fatal编程技术网

Javascript 验证POST请求

Javascript 验证POST请求,javascript,jquery,authentication,post,Javascript,Jquery,Authentication,Post,我正在创建一个tampermonkey用户脚本,它从包含用户高分的网站发送POST请求。比如说: $.post('https://example.com/scores', { id: 123, high_score: 999, }); 然而,问题是用户很容易伪造一个假分数,并用假高分发送他们自己的帖子请求。有没有办法对这些请求进行身份验证,这样我就可以区分来自我的userscript的真实请求和来自用户的伪造请求?也许是加密/解密 发送帖子时,您可以在页面中添加一个隐藏输入,其中包含一

我正在创建一个tampermonkey用户脚本,它从包含用户高分的网站发送POST请求。比如说:

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

然而,问题是用户很容易伪造一个假分数,并用假
高分发送他们自己的帖子请求。有没有办法对这些请求进行身份验证,这样我就可以区分来自我的userscript的真实请求和来自用户的伪造请求?也许是加密/解密

发送帖子时,您可以在页面中添加一个隐藏输入,其中包含一个nonce(仅在根据您使用的平台(唯一标识符)生成该数字时使用)值,读取该值并将其添加到帖子正文中,在服务器端,您检查数据库中是否存在此nonce,然后此帖子是真实的,否则它不是。 在后端,如果有会话,可以将此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>

让nonce=$(“#您的id”).val();
$.post($)https://example.com/scores', {
id:123,高分:999,暂时
});

这不是普通的javascript,而是jQuery。您的答案可能是:@nitobuendia当然,post请求是通过jQuery完成的;但是身份验证部分可以通过javascript完成,例如,使用vanilla javascript创建加密令牌并将其传递给请求。我在这个问题中添加了jquery标记,以避免混淆。@Rottnoats在这个页面上有一个实际的游戏,在这个页面上有一个函数返回用户的高分。我只是检索从函数返回的值并通过POST请求传递它。你不能完全让某人在编写js时不作弊。你最好的办法是使它尽可能复杂。另外,谁会看JS扩展代码?您还可以检查游戏是否有某种API,您可以在其中检查“游戏id”是否对应于现有游戏。否则,就让你的代码尽可能的混乱。好的,明白了。谢谢你的洞察力@rotternoats如果我没弄错的话,这不是他的网页。Tapermonkey是一个浏览器插件。是什么阻止某人伪造此请求?当然,他们可以只做
$.post()https://example.com/scores“,{id:123,高分:999,$(“#你的id”).val()}),是的@rotternoats,没错。