0

我正在向用户展示一些考试。用户在通过此考试之前不得进入实际站点。但是,将有一些用户可以选择在某个日期(例如从当前日期开始的月份)之前绕过考试。所以这些用户有一个月的时间参加考试。在那之前,他们可以点击考试页面上的“继续”进入网站。

我的逻辑:当普通用户在考试表单页面上单击提交时,我正在执行所有逻辑并向数据库提交信息。当这些“特殊”用户单击继续时,如果他们仍在那个一个月的窗口中,我将只是将“真”编码到“didPassExam()”方法。

我的问题是:要检查用户单击了哪个按钮,我正在执行以下操作(Struts 2 代码)

私人字符串提交;

public void setSubmit(String submit) {
    this.submit = submit;
}

在 JSP 中:

 <s:submit name="submit" value="Submit" />

 <s:submit name="submit" value="Proceed" />

所以基本上当用户点击一个按钮时,我的动作类会知道点击了哪个按钮。但是,一些黑客是否可以故意将“提交”按钮的值更改为“继续”,然后即使是普通用户也能绕过考试?

有人会以不同且更安全的方式执行此操作吗?

4

4 回答 4

8

是的,任何用户都可以通过特殊的“继续”并获得访问权限。

由于您可以(并且确实)已经分辨出用户类型之间的区别,因此您应该基于此在服务器上验证他们的按钮。总是可以绕过客户端检查。

于 2009-05-26T18:46:18.560 回答
7

一般来说,您不应该相信来自客户端的输入。您应该在服务器端验证特定用户有权跳过考试。大概,您从登录过程中知道用户是谁,并且您知道确定他们是否可以跳过考试的正确逻辑。所以没有理由相信客户告诉你的。

于 2009-05-26T18:47:29.447 回答
3

是的,这很容易被黑客入侵。每当您需要保护此类内容时,请在服务器端进行检查。也就是说,检查服务器端的用户类型(这就像用语中的“角色”)。

始终假设任何客户端代码都可以并且将被恶意用户替换。

于 2009-05-26T18:48:25.407 回答
1

您将需要捕获按下的按钮,然后针对用户进行验证。假设您的用户被实例化为类变量用户,并为公共方法 isSpecialUser() 返回布尔值:

public void setSubmit(String submit) {
    if (user.isSpecialUser() && submit == "Proceed") {
        // Only Special Users can set this to Proceed
        this.submit = submit;
    } else {
        // Sets itself to the remaining valid option (to prevent evilness)
        this.submit = "Submit";
    }
}
于 2009-05-27T02:12:46.397 回答