Javascript 如何在PHP应用程序中防止恶意POST请求?
我正在开发一个网站,它就像一个在线游戏,有一个评分系统。在完成某些活动后,用户会收到一些虚拟硬币,这些硬币通过一个名为“levelup.php”的页面存储在SQL数据库中 问题在于,用户可以直接访问“levelup.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(); 如何防止这种情况发生,并确保用户
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至少会对客户端的内容进行签名,以便它不会被篡改。