![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| MarkHunt |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 7.3.2013 Репутация: нет Всего: нет |
Здравствуйте!
Есть вот пример, в котором реализуется сортировка чисел типа double. Пример взят из книги Java Programming Language
класс SortDouble при выполнении операций probe(), compare() и swap() увеличивает соответчвующие счётчики класса SortMetrics, чтобы производить измерения о кол-ве выполненных операций. Казалось бы эти счётчики полностью защищены от внешних воздействий. Но утверждается, что есть уязвимость в SortDouble с помощью которой можно повлиять на счётчики, с целью получения неверного результата. По условию, "программист-злоумышленник" У меня была мысль - в сортировке вызвать swap() 3 раза вместо одного (при этом счётчик свопа показывает якобы неверные данные после сортировки), но это помоему не то что нужно. В общем нужно найти уязвимость в классе SortDouble и исправить её... заранее спасибо, всем кто откликнется! |
||||||||
|
|||||||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Все поля в SortMetrics открытые, поэтому с ними можно делать все, что угодно. Решением может быть перенос этих полей в сам сортирующий класс.
|
|||
|
||||
| MarkHunt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 7.3.2013 Репутация: нет Всего: нет |
в SimpleSortDouble эти открытые поля невозможно достать, т.к. поле curMetrics из SortDouble объявлено как private. Даже если воспользоваться методом getMetrics, то всё равно мы эти поля не достанем, т.к. getMetrics нам вернёт клонированный объект, а не текущий.
|
|||
|
||||
| MarkHunt |
|
||||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 7.3.2013 Репутация: нет Всего: нет |
Нашёл решение этой задачи здесь.
Чтобы показать уязвимость класса, предлагается сделать так
т.е. для "обмана" здесь sort() вызвается рекурсивно из super класса. При этом обнуляются все счётчики, т.к. в sort() вызывается init(). Результат работы оригинальной программы
и результат работы после "хака"
На форуме предложили такое решение этой проблемы
т.е. запретить вызывать sort() рекурсивно. Но как по мне, то можно сделать и попроще, просто убрать init() из сорта
Чтобы было легче нагуглить это решение, приведу здесь условие задания
|
||||||||||||||
|
|||||||||||||||
![]()
|
| Правила форума "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. |