Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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 如何在PHP应用程序中防止恶意POST请求?_Javascript_Php_Mysql_Vue.js_Post - Fatal编程技术网

Javascript 如何在PHP应用程序中防止恶意POST请求?

Javascript 如何在PHP应用程序中防止恶意POST请求?,javascript,php,mysql,vue.js,post,Javascript,Php,Mysql,Vue.js,Post,我正在开发一个网站,它就像一个在线游戏,有一个评分系统。在完成某些活动后,用户会收到一些虚拟硬币,这些硬币通过一个名为“levelup.php”的页面存储在SQL数据库中 问题在于,用户可以直接访问“levelup.php”,甚至通过使用浏览器控制台键入以下内容来发送恶意post请求: var xhttp = new XMLHttpRequest(); xhttp.open("POST", "levelup.php", true); xhttp.send(); 如何防止这种情况发生,并确保用户

我正在开发一个网站,它就像一个在线游戏,有一个评分系统。在完成某些活动后,用户会收到一些虚拟硬币,这些硬币通过一个名为“levelup.php”的页面存储在SQL数据库中

问题在于,用户可以直接访问“levelup.php”,甚至通过使用浏览器控制台键入以下内容来发送恶意post请求:

var xhttp = new XMLHttpRequest();
xhttp.open("POST", "levelup.php", true);
xhttp.send();
如何防止这种情况发生,并确保用户实际完成了获得分数所需的活动

ps:这是一个游戏,所以添加像reCAPTCHA这样的东西不是一个可行的解决方案

编辑:

“levelup.php”文件如下所示

//更新级别xp
$conn=新的mysqli(服务器、用户、密码、数据库);
$conn->query(“更新级别集xp=xp+15,其中用户_id=1”);
$conn->close();
该页面每次被访问时都会向用户添加15分,而不必确保他们玩过游戏

以下是我在每个游戏结束后在javascript文件中所做的操作:

var xhttp = new XMLHttpRequest();
xhttp.open("POST", "levelup.php", true);
xhttp.send();

我的问题是如何确保用户玩过游戏,而不是简单地访问levelup.php?

使用用户凭据实现一个crf令牌或随机生成的代码,并将其嵌入页面

如何在应用程序中触发此页面?AJAXPHP POST?基本上,您无法区分JS代码在浏览器或控制台中发出的请求之间的区别。就服务器而言,它们是来自同一源/客户端(浏览器)的两个相同请求。在编写游戏逻辑时,所有这些都应该发生在后端,客户端只发送发生的事件。然后,在使用这些事件之前,您需要在后端对其进行验证和健全性检查。积分和级别提升应在服务器端完成(db触发器或诸如此类),客户端只需要访问状态/分数/级别,而不需要更改。决不信任从客户端接收的数据(js等)。当向levelup.php文件发出请求时,执行一些检查,如初始分数等。我希望你的应用程序设计逻辑已经强制执行严格的检查。如果没有细节,这有点难说,但一般来说,你会将证据发送给服务器,让服务器决定是否获得了某个级别。例如,在一个测验应用程序中,你会发布用户的答案,然后在服务器端决定答案是否正确。这将如何阻止他们从控制台传递CSRF令牌?CSRF令牌用于保护端点不受跨站点请求的影响,而来自控制台的调用(在加载页面时)不是跨站点的。随机添加任何内容,而hmac至少会对客户端的内容进行签名,以便它不会被篡改。