0

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

问题是我不知道如何检查答案是否正确。在每个问题之后,如果用户答错了,应该能够重新启动或继续,或者如果用户答对了,它将自动继续。

如果检查是在服务器端完成的,则用户必须在提交答案后等待一秒钟,然后才会弹出下一个问题或弹出两个选项。但是,如果我在客户端这样做,不会有任何延迟,用户会更开心。

因此,作弊并没有太多好处,但人们肯定会这样做以在 Facebook 和 Twitter 上炫耀。

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

4

1 回答 1

2

不,如果您在客户端进行验证,则无法防止作弊。你可以让它变得更难一些,但最终你不能控制用户的浏览器,而且你的代码必须是可执行的。除非你采取额外的步骤,否则很容易通过查看页面源代码并查看正确答案的代码来作弊。如果您关心作弊,请在服务器端进行所有验证。在验证期间使用 AJAX 创建无缝的用户体验。等待 AJAX 请求几秒钟还不错,不会造成糟糕的用户体验。

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

不过,归根结底,我根本不会做任何验证客户端。使用 AJAX/服务器端组合为您的用户创造良好的体验,这也是公平的。

于 2013-03-25T15:54:09.883 回答