можно ли легко взломать или взломать то, что я делаю в своем веб-приложении? - PullRequest
0 голосов
/ 26 мая 2009

Я представляю пользователю некоторый экзамен. Пользователи не должны переходить на фактический сайт, прежде чем они сдают этот экзамен. Тем не менее, будут некоторые пользователи, которые будут иметь возможность обойти экзамен до некоторой даты (скажем, месяц от текущей даты). Таким образом, у этих пользователей есть окно месяца, чтобы сдать экзамен. до этого момента они могут нажать «Продолжить» на странице экзамена, чтобы просто зайти на сайт.

Моя логика: Когда обычные пользователи нажимают кнопку «Отправить» на странице формы экзамена, я делаю всю свою логику и отправляю информацию в БД. Когда эти «особые» пользователи нажмут кнопку «Продолжить», я просто добавлю «true» в метод «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 ]

8 голосов
/ 26 мая 2009

Да, любой пользователь может пройти по специальной «Приступить» и получить доступ.

Поскольку вы уже можете (и можете) определить разницу между типами пользователей, вам следует проверить их кнопку на сервере на основании этого. Проверки на стороне клиента всегда можно обойти.

7 голосов
/ 26 мая 2009

В общем, вы не должны доверять вводу от клиента. На стороне сервера вы должны подтвердить, что конкретный пользователь имеет право пропустить экзамен. Предположительно, вы знаете, кто является пользователем в процессе входа в систему, и вы знаете правильную логику, чтобы определить, могут ли они пропустить экзамен. Так что нет причин доверять тому, что говорит клиент.

3 голосов
/ 26 мая 2009

Да, это легко взломать. Всякий раз, когда вам нужно защитить что-то подобное, выполните проверку на стороне сервера. То есть проверьте тип пользователя (это похоже на «Роль» на языке) на стороне сервера.

Всегда предполагайте, что любой код на стороне клиента может и будет заменен злоумышленником.

1 голос
/ 27 мая 2009

Вам нужно будет зафиксировать нажатую кнопку, а затем проверить ее по отношению к пользователю. Предполагая, что ваш пользователь создан как пользователь переменной класса и возвращает логическое значение для открытого метода 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";
    }
}
...