Java Web考试系统如何检测并阻断客户端远程访问连接
Java Web考试系统远程访问检测方案说明
核心可行性结论
JSP是服务端运行的后端技术,本身无法获取客户端的系统状态,完全不可能直接检测远程访问软件。
运行在浏览器沙箱中的JavaScript默认没有权限读取客户端的进程列表、后台服务信息,所以也无法直接检测到远程访问软件是否运行,只能通过间接特征做概率性判断。
可行的间接检测方案(纯Web端可实现)
- 窗口状态检测:监听考试页面的
focus和blur事件,统计窗口失焦的频率和时长,频繁失焦大概率存在切换远程窗口、被远程控制的风险
示例代码:let blurCount = 0; window.addEventListener('blur', () => { blurCount++; if(blurCount > 3) { // 触发违规警告、提交后台记录逻辑 } }); - 屏幕特征检测:通过
window.screen对象获取设备分辨率、可用屏幕区域参数,远程访问场景下经常会出现分辨率适配异常、可用区域和设备标称参数不匹配的特征,可以作为异常判断依据 - 操作特征检测:监听
mousemove、keydown事件采集操作轨迹,远程控制的鼠标移动会比本地操作更平滑、延迟更高,键盘输入间隔也会存在固定偏差,通过特征模型可以识别出大部分远程操作场景 - 屏幕共享校验:要求考生考试全程授权共享整个屏幕(而非单个考试窗口),JS可以通过
getDisplayMedia接口校验共享源类型,避免考生在后台运行远程软件操作考试
成熟落地实现方案
- 纯Web端方案:目前市面上绝大多数线上考试SaaS的Web端都是整合上述所有间接检测逻辑,配合摄像头定时抓拍、音频检测等组合方案,整体识别准确率可以覆盖80%以上的常规远程作弊场景,优点是无需考生安装额外程序,接入成本低,缺点是存在一定的绕过概率
- 轻量客户端配合方案:如果对防作弊要求更高,可以开发10M以内的轻量桌面巡检程序,考生进入考试前需要先运行该程序,程序会直接遍历本地进程列表,匹配TeamViewer、向日葵、ToDesk、AnyDesk等所有常见远程访问软件的进程名,检测到就强制关停或禁止进入考试,巡检程序可以通过本地WebSocket和Web考试端通信,后端JSP可以直接拿到巡检结果做准入判断,这个方案准确率接近100%,是现在中高严肃性考试的通用落地方案
注意:所有纯Web端的检测逻辑都存在被绕过的可能,比如使用特制的定制化远程工具、修改浏览器权限配置都可以规避特征检测,实际落地时建议配合人工监考、考后操作录像回溯等机制,不能完全依赖技术检测结果作为唯一判据。
内容的提问来源于stack exchange,提问作者Rajashree Saste
相关产品推荐
相关产品推荐

