如何检测破解的JS验证?

时间:2013-03-25 15:29:28

标签: javascript security validation

我有一个网站上有一个测验。用户无法直接从该测验中获得任何好处,但他们可以在Facebook和Twitter上分享他们的结果。

问题在于我无法弄清楚如何检查答案是否正确。在每个问题之后,如果用户出错,用户应该能够重启或继续,或者如果用户做对了,它将自动继续。

如果检查在服务器端完成,则在弹出下一个问题或弹出两个选项之前,用户必须等待一秒钟后提交答案。但是,如果我在客户端进行此操作,则不会有任何延迟,用户会更高兴。

所以在作弊方面没有太大的收获,但当然人们会这样做,以便在Facebook和Twitter上展示它。

那么,有没有办法进行抽查或任何其他检测用户在客户端作弊的方法?或者我只需要决定我要在哪里进行验证?

1 个答案:

答案 0 :(得分:2)

不,如果您在客户端进行验证,则无法阻止作弊。你可以稍微努力一点,但最终你不能控制用户的浏览器,你的代码必须是可执行的。除非你采取额外的步骤,否则只需查看页面源并查看代码以获得正确的答案就很容易作弊。如果您关心作弊,请在服务器端进行所有验证。使用AJAX在验证期间创建无缝的用户体验。等待AJAX​​请求的几秒钟也不错,并且不会造成糟糕的用户体验。

如果您在客户端验证上已经死定,那么使攻击者背后的一个难题就是混淆JavaScript例程。如果将混淆的代码生成器包装到JS eval函数调用中,攻击者必须先对其进行去混淆,然后才能确定问题的“正确”答案。这可以使用SpiderMonkey轻松完成,但它会阻止脚本小子和懒惰。在与模糊处理配对时,你在这里和那里使用错误答案的想法可能也会很好。

但是,在一天结束时,我根本不会做任何验证客户端。使用AJAX /服务器端组合为用户创造良好的体验,这也是公平的。