今天我在我的网络应用程序中发现了一个安全漏洞(请原谅我,因为我无法在SO上找到它)。请考虑以下代码:
<html>
<head>
<script>
intv = setTimeout(function(){test()} , 10000);
function test(){
val = document.getElementById('tt').value;
alert(val);
intv = setTimeout(function(){test()} , 10000);
}
</script>
</head>
<body>
<input type="hidden" value="10" id="tt">
</body>
</html>
问题:
此代码将以10秒的间隔提醒输入字段的值。在第一次警报后,我通过查看其源代码来更改浏览器中的输入字段值。它会提醒我后来添加的价值,这对我来说并不好。
现实生活场景:
我有一个虚拟教室,学生和老师都参加课堂会议。我每5秒发送一次ajax请求以更新后端的类持续时间,并在db中的duration字段中添加+5
,之后学生必须根据他们在课程中花费的时间向我们付款。我担心,如果任何聪明的人只是在浏览器中编辑源代码而不是在5秒后发送请求,他改为1小时(为了争论)欺骗我的逻辑。如何防止客户端的任何非法活动?
答案 0 :(得分:0)
只需检测他们所做的每一个请求(如果它是虚拟教室,有什么东西在正确吗?),并在服务器端保存,当他们访问某个地方(数据库)时。有一个会议开始和结束的表格。
答案 1 :(得分:0)
您无法阻止用户更改JavaScript值。
相反,您应该验证服务器上的输入。
在这种情况下,正如评论中所建议的那样,您应该使用服务器时间记录开始和结束时间。