Как препятствовать тому, чтобы пользователь видел информацию предыдущих пользователей путем нажимания кнопки “Back” [дубликат]

Я использую

Android Studio 3.2.1 ,

rxjava: 2.2.0 ,

[ 1132] Плагин Kotlin версии 1.3.11-release-Studio3.2-1

blockquote>

После ввода в файле *.kt: Observable.unsafeCreate{} и нажатия Ctrl + Пробел между {} Android Studio показывает мне следующее предложение:

enter image description here

То же самое предложение Android Studio показывает, когда я печатаю в файле *.java.

В настройках Android Studio я не вносил никаких изменений в конфигурацию.

Я полагаю, вы импортируете Observable из rx - первый элемент в списке завершения на изображении ниже. Попробуйте импортировать Observable из io.reactivex - выделенный элемент в списке завершения ниже, это может помочь: import io.reactivex.Observable.

enter image description here

Для его использования необходимо импортировать rxjava2:

implementation 'io.reactivex.rxjava2:rxjava:2.2.0'

РЕДАКТИРОВАТЬ :

Как было выяснено, диалог завершения кода показывал t ->, потому что параметр в Action1.call(T t) называется t. Это можно увидеть, если мы посмотрим на сигнатуру метода rx.Observable.unsafeCreate в RxJava 1.3 : интерфейс

public static  Observable unsafeCreate(OnSubscribe f) {
    return new Observable(RxJavaHooks.onCreate(f));
}

OnSubscribe расширяет Action1, а Action1 имеет следующую сигнатуру :

public interface Action1 extends Action {
    void call(T t);
}

Таким образом, параметр называется t, и Android Studio предлагает его как t ->.

В RxJava2 мы имеем другую подпись:

public static  Observable unsafeCreate(ObservableSource onSubscribe) {...}

public interface ObservableSource {
    void subscribe(@NonNull Observer observer);
}

Мы видим, что в ObservableSource.subscribe() параметр метода называется observer, поэтому мы видим его как observer->. [ 1145]

Заключение : предложение IDEA основано на имени параметра метода функционального интерфейса, который вы реализуете как лямбда-выражение.

9
задан Bill the Lizard 7 December 2011 в 11:40
поделиться

13 ответов

Как будет, поражая кнопку "Назад" заставить пользователя видеть данные другого пользователя? Каков Ваш вариант использования? Это разработано для общедоступного терминала, где каждый пользователь отправляет данные и затем уезжает? В этом случае свяжите каждый вход с уникальным идентификатором сессии. Отслеживайте действительные идентификаторы сессии в своем сервере. После того как вход отправлен, удалите тот идентификатор сессии из действительных идентификаторов. Если это подходит снова, то не отображайте информацию.

12
ответ дан 4 December 2019 в 07:36
поделиться

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

Это не проблема, которая может быть решена с JavaScript или решением серверной стороны. Та часть того, почему "повреждение кнопки "Назад"" осуждено: это ничего на самом деле не решает.

10
ответ дан 4 December 2019 в 07:36
поделиться

Повреждение кнопки "Назад" является кардинальным грехом веб-разработки.

но Вы могли попробовать немного сценария Java в onload, который обновился, детали согласно в настоящее время входили в систему сессия.

3
ответ дан 4 December 2019 в 07:36
поделиться

Это кажется, что Ваша настоящая проблема состоит в том, что пересообщение работает. Это, вероятно, было бы то, потому что Вы:

  1. доверяют учетным данным от браузера, а не текущей сессии, или
  2. не проверяют, что текущей сессии предоставляют доступ данные, представленные значением ключа/идентификатора, отправленным от браузера

Я рекомендую, чтобы после того, как пользователь вошел в систему, Вы никогда не доверяете имени пользователя, отправленному браузером. Идеально используйте службы безопасности платформы как безопасность Spring, но в их отсутствие можно полагаться на HttpServletRequest.getUserPrincipal ().

Для проверки текущей сессии предоставляют доступ данные, Вы могли использовать механизм Списка управления доступом, обеспеченный платформой, такой как безопасность Spring, или включать a WHERE OWNER=? пункт в Ваших запросах базы данных.

2
ответ дан 4 December 2019 в 07:36
поделиться

Я не уверен, понимаю ли я Вашу проблему точно. Вы обеспокоены Человеком A, выходящим из системы, Человек B входит в систему от того же ПК и экземпляра браузера, и затем Вы хотите препятствовать тому, чтобы Человек B видел независимо от того, что A просматривал?

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

1
ответ дан 4 December 2019 в 07:36
поделиться

Я не уверен, что понимаю Вашу проблему правильно, но она кажется, что Вы позволяете, хранит.

Один подход для предотвращения перепредставления должен использовать маркеры. Поместите случайный маркер в форму и сессию. На проверке представления, что отправленный маркер соответствует маркеру на сессии

  • если это делает, замените маркер на сессии с новой и обработайте запрос
  • иначе прекратите обрабатывать запрос).
1
ответ дан 4 December 2019 в 07:36
поделиться

Все различные браузеры имеют различные поведения и причуды когда дело доходит до того, как история касается кэша и различных заголовков, доступных для управления им. Firefox 3 работает по-другому по сравнению с Firefox 2, вновь отображая потенциально уязвимые данные, когда пользователь нажимает кнопку "Назад" несмотря на использование кэширующихся директив для предотвращения его. Лучшее решение состоит в том, чтобы использовать сеансовые куки, которые не сохраняются, и сообщите пользователю потребности закрыть окно браузера после того, чтобы выходить из системы. Особенно, если они на общедоступном терминале. Болезненный, я знаю, но текущие предложения браузера и Спецификация HTTP не обеспечивают механизмов для контакта с историей браузера. Историю может рассматривать по-другому, чем кэширование агент пользователя согласно Спецификации HTTP. См. 13.13 Списков предыстории, как определено в Протоколе передачи гипертекста RFC 2616 - HTTP/1.1 для проблемы и объяснения.

1
ответ дан 4 December 2019 в 07:36
поделиться

Если Вы волнуетесь по поводу кого-то видящего, что было в форме в предыдущей странице, Вы могли использовать скрытую форму для "реального" сообщения и использовать то, которое это только для дисплея для пользователя. Когда пользователь отправляет форму дисплея, Вы копируете все поля к скрытой форме, очищаете форму дисплея, затем отправляете скрытую.

Я соглашаюсь со всеми остальными - играющий с кнопкой "Назад", это - плохой способ обработать информацию о защите.

0
ответ дан 4 December 2019 в 07:36
поделиться

если это могло бы помочь. Это работает на ASP, используйте эквивалентное решение для других языков.

0
ответ дан 4 December 2019 в 07:36
поделиться

Я не на 100% уверен, что это - фиксация к Вашей проблеме, поскольку я не полностью понимаю, как Вы вернули бы использование данных другого пользователя. Однако я знаю, что для веб-приложений, которые я разрабатываю, я пытаюсь исключительно использовать Перенаправление После Сообщения для предотвращения кнопки "Назад" и представлений формы дубликата обновления.

0
ответ дан 4 December 2019 в 07:36
поделиться

Я думаю, что это - так же проблема пользовательского интерфейса как проблема кодирования. Вдобавок к любым методам антикэширования Вы используете, необходимо прояснить пользователю, что они должны нажать большую, очевидную кнопку "Logout" (или эквивалентный), когда они сделаны.

0
ответ дан 4 December 2019 в 07:36
поделиться

Jeff Atwood описал способ предотвратить CSRF и нападения на XSRF здесь.

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

0
ответ дан 4 December 2019 в 07:36
поделиться

У меня была подобная проблема в .NET. Я добавил следующий JavaScript к своей странице выхода из системы:

document.execCommand ("ClearAuthenticationCache", "ложь");

теперь при нажатии кнопки "Назад", необходимо пройти проверку подлинности снова.

-1
ответ дан 4 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: