![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: 1 Всего: 1 |
Привет!
В коде нашего проекта во многих в экшенах, там, где есть модификация БД, есть проверки на get-запрос, в случае присутсвия такого происходит редирект на индексную страницу. Понятно, что нелогично использовать get-запрос для изменения БД, но хотелось бы получить более конкретные обоснования этой проблемы. Так ли нужны эти проверки и что будет, если кто-то случайно (или не случайно) пошлет get-запрос там, где он не нужен (например, восстановления ранее удаленного профиля пользователя). P.S. почитал несколько статей по этой теме, но до конца так и не понял :( -------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
да уж, явная проверка на гет - это жесть
-------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: 1 Всего: 1 |
Нет, я понимаю, что get это вывод, post это изменение. В чем будет проблема, если вместо post в данном случае использовать get?
Добавлено через 3 минуты и 43 секунды У меня нет такого метода, я использую Struts и вся обработка выполняется в execute(). -------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
ну смотри, допустим есть у тебя пользователи в твоей системе, где пользователи имеют какие-нибудь средства, ну или какие-нибудь баллы. А есть командочка, которая переводит средства с одного аккаунта на другой. Вбили коммандочку перевода средств в адресную строку браузера, он заглючил и ты нажал 5 раз обновление страницы, и у одного пользователя 5 раз вместо одного снялись деньги, а второму 5 раз добавились... -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: 1 Всего: 1 |
А если ввести некий UID операции?
-------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| kkorsakoff |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 3 Всего: 14 |
y3u, а на основании чего сделано такое разделение на get и post? где-то вывод производится на post (например, получение какой-либо статистики), а где то изменение на get. Тем более
1. get имеет известное ограничение на длину 2. клик по ссылке ты post'ом не отправишь 3. да просто кому что удобнее ИМХО, не надо так разделять эти запросы, а абстрагироваться от этого всего. А если необходимо защитить от F5, то тут только применением паттерна token. Кстати вроде struts имеет встроенную поддержку этого, но честно скажу - не применял http://www.javaworld.com/javaworld/javatip...javatip136.html Это сообщение отредактировал(а) kkorsakoff - 3.6.2007, 16:16 |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Запрос get и, соответственно, все его параметры, виден в адресном поле браузера, а также эта строка сохраняется в логах (в логе Томката, например). Поэтому пару login - password через get обычно не передают.
Параметры get могут быть только текстовые. |
|||
|
||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
Разделение на post и get запросы было придумано для четкого отделения запросов на изменение данных от запросов на получение информации. Конечно, можно написать как угодно (точно так же как можно не использовать, например, mvc паттерн), но правила хорошего тона web-разработки требуют такого разделения. Нелогично, к примеру, когда пользователь может сохранить в избранном (намеренно или случайно) или переслать другу линк, вызывающий изменения профиля пользователя и переводящий после этого на страницу "ваш профиль изменен". С другой стороны, плохо когда информация о том в какой раздел каталога перешел пользователь передается через post запрос, в этому случае сохраненный в избранное линк может привести куда угодно, но не на выбранный каталог (так как информация из тела запроса само собой не сохранися браузером). Была неплохая статья Применимость методов GET и POST, но что-то сейчас не открывается, может заработает еще.. Но резюмировалась она тем же: get -- для навигации, post -- для модификации. |
|||
|
||||
| kkorsakoff |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 3 Всего: 14 |
Несомненно, какие-то рекомендации каждый сам для себя выработал. Но они скорее "работают" на клиентской стороне, то есть по большому счету выбирает верстальщик. Просто я бы так четко не разделял: get для отображения, post для модификации. В реальной жизни эти два подхода постоянно перемешиваются, что сложно выделить четкое правило. Опять же мое ИМХО. А ссылку будем ждать, пока не откроется
Серверу должно быть все равно, что за запрос к нему пришел (ну кроме file upload есс-но). Или не так? И проверка на GET это как уже сказали - "жесть":) |
|||
|
||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
||||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
а я не согласен.
это все вопрос чистоты кода, между прочим... ест некоторые рекомендации, выполнение которых настоятельно рекомендуется в хороших софтверных компаниях, и где за тяпляпный кодинг и верстальщика и программиста просто бьют по их кривым граблям... код должен быть максимально логичен, прост и понятен. А для этого надо использовать все придумки по назначению. Их не просто так выдумывали умные дяди и тети, состоящие во всякого рода консорциумах... Вот я посмотрю на вас как вы будете потом мудохаться писать скрипты на меркури или на джейметре для функционального и негрузочного тестирования... -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
y3u
Однозначных правил не бывает, даже если из придумывали умные дяди, всегда слепо следовать их инструкциям не стоит. Они хороши для общего случая. Тогда когда нет веских и взвешенных оснований делать по другому. |
|||
|
||||
| Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 24 Всего: 144 |
Согласен с Maksym. Насчет POST: разумеется, такие вещи как сабмит формы лучше делать постом. Но, к сожалению, если на все действия, которые меняют состояние на сервере (а в современных веб-приложениях это практически любые действия) вешать кнопки вместо ссылок, то будет не очень-то юзабельно. Например, Logout через ссылку - это повсеместно применеяемая практика, а уж что-что, а Logout-то как раз очень даже меняет состояние системы. Так что тут важно не только выбрать подходящий метод выполнения запроса, но и применять всякие отработанные схемы защиты от дурака пользователя от самого себя. Например, PRG (POST-Redirect-Get), страницы подтверждений и пр. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |