使用浏览器控制台发送 ajax 数据
Using browser console to send ajax data
我有一个PHP测验页面,它通过ajax通过一个名为answer()的函数单击答案时发布答案数据,然后加载问题和答案内容,如果答案正确,则通过loadQuestion()函数也通过ajax加载问题和答案内容。这是我代码的一部分:
<ul class="choices">
<li><a href="javascript:void(0);" onclick="answerswer(this);"><span id="a0"><?php echo $questionDetail['a'.$answerOrder[0]]; ?></span></a></li>
<li><a href="javascript:void(0);" onclick="answerswer(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="answerswer(this);"><span id="a2"><?php echo $questionDetail['a'.$answerOrder[2]]; ?></span></a></li>
<li><a href="javascript:void(0);" onclick="answerswer(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>
我在这里的问题是人们可以通过在浏览器开发人员控制台中编写一个简单的 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();
}
}
});
}
我通过删除onclick="answerswer(this);"
并将answer()
功能替换为$('.choices a').click()
找到了临时解决方案。然后,我通过我的 ajax 页面发送事件来验证我的 PHP 页面中是否存在点击事件。
这个问题会有更好的解决方案吗?我已经尝试过令牌,但问题是当我通过 ajax 加载问题时,我将不得不将令牌保存在隐藏的输入等中,他们也可以获取令牌并发送它。
虽然您无法
阻止用户使用控制台来操作您的代码。我可以提出以下建议:
您可以对从单个用户接受的 Ajax 请求数量设置服务器端限制。
添加验证码(如果您看到异常活动)
混淆代码和 AJAX 调用格式,因此需要用户花费更多精力来分析代码,并且会阻止大多数人
使用动态生成的图像,答案"单选按钮"位于随机位置,并提交用户点击事件的x和y位置,并使用服务器端逻辑将点击位置与答案选项相匹配
使用服务器端的会话来跟踪每个用户的正确和不正确猜测,并强制执行规则。
只要您依靠客户端来"玩得很好",您就会将您的应用程序暴露给最终用户的意愿。
相关文章:
- React ajax数据集成
- 使用jQuery发布的AJAX数据包含引号
- 如何将Ajax数据值分配给PHP变量
- 使用外部ajax数据PHP绘制图表
- 如何打印AJAX数据
- AJAX数据包含一个或多个单词.
- 将Ajax数据发布到PHP REST服务
- AJAX 数据响应 - 如何解析 html
- 将 Ajax 数据分配给全局变量时出现问题
- 按钮在第一次成功的 ajax 数据加载后不起作用
- Javascript / JQuery循环访问已发布的ajax数据字符串以为其分配新值
- 发送的 Ajax 数据不起作用
- Jquery 工具提示未随 AJAX 数据加载一起显示
- Ajax获取数据以获取另一个Ajax数据
- 如何安全地依赖现有的Ajax数据
- 如何将jquery ajax数据提取为html
- 自定义AJAX数据类型
- 如何将ajax数据发送到rails 3.jQuery正在转义字符串
- jQuery AJAX数据参数
- Laravel 4:通过控制器操作ajax数据