Javascript 使用浏览器控制台发送ajax数据
我有一个PHP测验页面,它通过ajax通过名为answer()的函数单击答案时发布答案数据,然后如果loadQuestion()函数也通过ajax正确,则加载问答内容。以下是我代码的一部分:Javascript 使用浏览器控制台发送ajax数据,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个PHP测验页面,它通过ajax通过名为answer()的函数单击答案时发布答案数据,然后如果loadQuestion()函数也通过ajax正确,则加载问答内容。以下是我代码的一部分: <ul class="choices"> <li><a href="javascript:void(0);" onclick="answer(this);"><span id="a0"><?php echo $questionDetail['a'
<ul class="choices">
<li><a href="javascript:void(0);" onclick="answer(this);"><span id="a0"><?php echo $questionDetail['a'.$answerOrder[0]]; ?></span></a></li>
<li><a href="javascript:void(0);" onclick="answer(this);"><span id="a1"><?php echo $questionDetail['a'.$answerOrder[1]]; ?></span></a></li>
</ul>
<div id="countdown"><div class="saniyeLoading" style="display: none;"></div></div>
<ul>
<li><a href="javascript:void(0);" onclick="answer(this);"><span id="a2"><?php echo $questionDetail['a'.$answerOrder[2]]; ?></span></a></li>
<li><a href="javascript:void(0);" onclick="answer(this);"><span id="a3"><?php echo $questionDetail['a'.$answerOrder[3]]; ?></span></a></li>
</ul>
<script type="text/javascript">
function answer(elm){
countdown.stop();
var answer = $(elm).text();
$.ajax({
type: 'POST',
url: "/soru",
data: {act: 'soru', answer: answer},
success:function (data) {
if(data == "success"){
setTimeout(loadQuestion, 300);
} else {
location.href = "/yanlis";
}
}
});
}
function loadQuestion() {
$.ajax({
type: 'POST',
url: "/",
data: {act: 'ysoru'},
success: function (data) {
try {
data = $.parseJSON(data);
$("#questionDetailQuestion").text(data.questionDetail['question']);
$("#a0").text(data.questionDetail['a0']);
$("#a1").text(data.questionDetail['a1']);
$("#a2").text(data.questionDetail['a2']);
$("#a3").text(data.questionDetail['a3']);
$('.saniyeLoading').hide();
countdown.start();
} catch (e) {
}
}
});
}
</script>
功能应答(elm){
倒计时。停止();
var answer=$(elm.text();
$.ajax({
键入:“POST”,
网址:“/soru”,
数据:{act:'soru',答案:答案},
成功:功能(数据){
如果(数据=“成功”){
setTimeout(loadQuestion,300);
}否则{
location.href=“/yanlis”;
}
}
});
}
函数loadQuestion(){
$.ajax({
键入:“POST”,
网址:“/”,
数据:{act:'ysoru'},
成功:功能(数据){
试一试{
data=$.parseJSON(数据);
$(“#questionDetailQuestion”).text(data.questionDetail['question']);
$(“#a0”).text(data.questionDetail['a0']);
$(“#a1”).text(data.questionDetail['a1']);
$(“#a2”).text(data.questionDetail['a2']);
$(“#a3”).text(data.questionDetail['a3']);
$('.saniyeLoading').hide();
倒计时。开始();
}捕获(e){
}
}
});
}
我这里的问题是,人们可以通过在浏览器开发人员控制台中编写一个简单的for循环来操作answer()函数。大概是这样的:
for(i = 1 ; i <= 4; i ++ ) {
$.ajax({
type: 'POST',
url: "/soru",
data: {act: 'soru', answer: $('#a' + i).text()},
success:function (data) {
if(data == "success"){
loadQuestion();
}
}
});
}
for(i=1;i),但您无法阻止用户使用控制台操纵代码。我可以建议如下:
您可以在服务器端限制从单个用户接受的Ajax请求的数量
添加验证码,如果您看到异常活动
混淆您的代码和AJAX调用格式,所以它需要用户更多的精力来分析代码,并将阻止大多数人
使用动态生成的图像和位于随机位置的答案“单选按钮”,并返回用户单击事件的x和y位置,并使用服务器端逻辑将单击位置与答案选项匹配
使用服务器端的会话跟踪每个用户的正确猜测和错误猜测,并强制执行规则
只要你依靠客户端“玩得很好”,你就是在向最终用户展示你的应用程序。谢谢你的回答。你觉得我的解决方案怎么样?你认为它容易操作吗?是的。jQuery有.trigger()函数,它允许您触发click event ProgramMatically您指的是类似于(i=1;我刚刚在链接的帮助下检查了这一点,有一个名为isTrigger的变量,它只使用触发器()触发)函数。我认为这将解决我的问题。除非在控制台中也可以将其设置为null。实际上,我的应用程序是一个测验,如果你回答错误,你将无法进行到最后。有500多个问题。我已经在一个会话中跟踪回答的问题,很遗憾,这不是Mehm的解决方案……我会让API完全依赖于删除用户状态,该状态将仅存储在服务器上。例如,负责检查答案是否正确的API也有权在错误时立即终止用户会话,要求他们在任何“正确答案”之前重新开始数据将被提供给他们——这将防止您试图避免的确切类型的滥用。最简单的实现将返回data=='failed',即使对于正确的答案也是如此,如果发出请求的用户在会话数据中“failed”(来自上一个错误的答案)。然后,无论什么操作都将重新启动他们的游戏(我相信是hitting/yanlis)将刷新他们的会话。这样游戏就不能被强制。只要你检查用户是否参与他们提交答案的问题。同样,如果用户会话数据没有显示他们参与了这个问题,那么永远不要对此问题发出成功响应。