我在网络应用程序中所做的事情可以被轻易攻击或破解吗?

时间:2009-05-26 18:42:13

标签: java struts2 weblogic

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

我的逻辑: 当普通用户点击考试表单页面上的提交时,我正在完成所有逻辑并向数据库提交信息。当这些“特殊”用户点击继续时,我将只是在'didPassExam()'方法中加密'true',如果它们仍然在那个月的窗口中。

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

私人字符串提交;

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

在JSP中:

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

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

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

有人会采用不同且更安全的方式吗?

4 个答案:

答案 0 :(得分:8)

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

由于您可以(并且确实)已经告诉用户类型之间的区别,您应该根据它来验证服务器上的按钮。始终可以绕过客户端检查。

答案 1 :(得分:7)

通常,您不应该信任来自客户端的输入。您应该在服务器端验证特定用户是否有权跳过考试。据推测,您知道用户是谁来自登录过程,并且您知道确定他们是否可以跳过考试的正确逻辑。因此,没有理由相信客户告诉你的内容。

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

您需要捕获按下的按钮,然后针对用户进行验证。 假设您的User被实例化为类变量user,并返回公共方法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";
    }
}