2009-05-26 8 views
0

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

My Logic: Когда обычные пользователи нажимают кнопку «Отправить» на странице формы экзамена, я выполняю всю свою логику и отправляю информацию о БД. Когда эти «специальные» пользователи нажимают кнопку «Далее», я буду просто привязывать «истину» к методу «didPassExam()», если они все еще находятся в этом окне на один месяц.

Мой вопрос: проверить, какую кнопку нажал пользователь, что я делаю следующее (Struts 2 кода)

частная строка представить;

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

И в JSP:

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

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

поэтому в основном, когда пользователь нажимает на кнопку, мой класс действия будет знать, какая кнопка была нажата. Но может ли какой-то хакер намеренно изменить значение кнопки «Отправить» на «Продолжить», а затем обходить экзамен даже для обычных пользователей?

Кто-нибудь сделает это другим и более безопасным способом?

ответ

8

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

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

+1

Если вы используете Firefox с Firebug, редактированием HTML в форме перед отправкой его так же легко, как право -клика, щелкнув элемент проверки и нажав кнопку «Редактировать HTML». Три клика. Так что нет ... не так безопасно. –

7

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

3

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

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

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"; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^