|
|
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
Начитавшись теории, проверил следующий пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. В результате, действительно все работает. Экземпляры классов ObjectOutputStream out и ObjectInputStream in легко вызывают ЗАКРЫТЫЕ методы класса А!!!(вместо своих). Естественно, они используют средства отражениея, т.е. анализируют объект Class класса A , и найдя, что в нем определены функции writeObject и readObject - вызывают их. Интерфейс Serializable не содержит данных методов! Вопрос, как такое возможно? Ведь эти классы никак не связаны ни каких дружественных связей! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 06:31:54 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
VectorВопрос, как такое возможно? Ведь эти классы никак не связаны ни каких дружественных связей! "Такое" - это какое? Что private-методы вызываются? Так Вы же уже ответили, через reflection это делается... Вот кусок из кода ObjectOutputStream: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 08:39:06 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
Ну и там же, в ObjectOutputStream, смотрите код getPrivateMethod :) --С уважением, ponomarevvb-- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 08:40:24 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
Т.е. вы хотите сказать, что любой класс может получить доступ к закрытым членам класса через механизм отражения??? Зачем тогда вообще нужны эти спецификации доступа? Если и так все очень просто: 1.Получил от любого объекта объект Class, 2.Изучил его с помощью механизма отражения, 3.Делай что хочешь... А если у тебя в закрытом члене класса хранится открытый пароль??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 08:53:31 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
VectorТ.е. вы хотите сказать, что любой класс может получить доступ к закрытым членам класса через механизм отражения??? Зачем тогда вообще нужны эти спецификации доступа? Если и так все очень просто: 1.Получил от любого объекта объект Class, 2.Изучил его с помощью механизма отражения, 3.Делай что хочешь... А если у тебя в закрытом члене класса хранится открытый пароль??? Механизм отражений - вещь специфическая и в коде применяется не часто. Спецификации доступа нужны для написания грамотного кода. Вас где штампуют таких красивых, которые хотят пароль хранить в члене класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 09:15:14 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
А где еще его хранить после дешифрования??? В Java есть только объекты, исключая примитивные типы, да и те можно определить только в классе. Или впервые слышите об этом? Если где-то открытый пароль и будет хранится (даже на время проверки), то только в классе - больше негде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 09:19:05 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
Или может привести другой пример? Для чего думаете введено слово transient? Именно для того чтобы скрывать от серилизации такие секретные сведения из класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 09:21:53 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
Ну вообще! Я не знаю как эт называется, но вот этот код работает на ура!: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Получается, что нет закрытых членов класса!!! Это просто ж... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 10:39:10 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
VectorА где еще его хранить после дешифрования??? Если где-то открытый пароль и будет хранится (даже на время проверки), то только в классе - больше негде. Спокойно. Не нужно нервничать. Вы не с той стороны подходите к проблеме. Пароль не нужно расшифровывать. Это глупо, опасно и неправильно. Пароль нужно шифровать и сравнивать с уже зашифрованным. Если они совпадают - вуаля, всё хорошо. А если вы в применении к БД этот вопрос поднимаете - так вам вообще задумываться об этом не нужно - просто передали в БД то, что пользователь ввёл в форме и забыли о нём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 10:59:16 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
Vector Именно для того чтобы скрывать от серилизации такие секретные сведения из класса. Нет. Почему - см. мой предыдущий пост. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 10:59:52 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
VectorНу вообще! Я не знаю как эт называется, но вот этот код работает на ура!: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Получается, что нет закрытых членов класса!!! Это просто ж... Вы такие конструкции постоянно используете в своём коде? Почему вас так возбудили отражения? Я не могу понять :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 11:01:03 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
Насчет паролей Вы правы. Дело не в механизме отражения, а в возможности доступа к закрытым членам класса, которые предназначены только для внутреннего использования. Ну, к примеру, это может быть связано с сокрытием реализации, с нежеланием давать доступ к некоторым алгоритмам внутри класса. Например, исправив некотрые закрытые члены класса класс может может сделать запрещенную операцию. А это источник потенциальной опасности. Или, как любят говорить, дыра, уязвимость and etc. Просто после С++ такие вещи просто шокируют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 11:09:40 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
Настрой SecurityManager не по дефолту (разрешено все) а как надо, и не будет у тебя доступа к приватным данным. ===================================== Страну, в которой все ходят на бровях, на колени не поставишь... ===================================== ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 11:11:03 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
VectorНасчет паролей Вы правы. Дело не в механизме отражения, а в возможности доступа к закрытым членам класса, которые предназначены только для внутреннего использования. Ну, к примеру, это может быть связано с сокрытием реализации, с нежеланием давать доступ к некоторым алгоритмам внутри класса. Например, исправив некотрые закрытые члены класса класс может может сделать запрещенную операцию. А это источник потенциальной опасности. Или, как любят говорить, дыра, уязвимость and etc. Просто после С++ такие вещи просто шокируют. А что мешает на сях поставить прерывание на функцию и поправить адрес возврата в стеке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 11:12:37 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
Что один написал, то другой завсегда сломать может :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 11:17:47 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
Кувалдин РоманНастрой SecurityManager не по дефолту (разрешено все) а как надо, и не будет у тебя доступа к приватным данным. ===================================== Страну, в которой все ходят на бровях, на колени не поставишь... ===================================== +1 http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#getDeclaredMethod(java.lang.String, java.lang.Class[]) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 11:22:32 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
А можно пример с SecurityManager в контексте класса А. Т.е. к примеру, я создаю свой класс, который позже будет использоваться кем-то еще. Как мне надо настроить безопасность, чтобы другой программист не мог добраться до private методов даже с помощью методов, указанных выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 12:19:48 |
|
||
|
Знатокам серилизации вопрос
|
|||
|---|---|---|---|
|
#18+
VectorА можно пример с SecurityManager в контексте класса А. Т.е. к примеру, я создаю свой класс, который позже будет использоваться кем-то еще. Как мне надо настроить безопасность, чтобы другой программист не мог добраться до private методов даже с помощью методов, указанных выше. Вы точно уверены, что вам нужен именно такой путь? Вот честно скажу - не видел в жизни еще, чтобы требовалось прятать private методы так чтобы их никто никогда не нашел. Ведь насколько я помню - securityPermission'ы настраиваются на экземпляре JDK или в runtime? Что помешает другому программисту сказать AllPermission? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 13:30:16 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34090239&tid=2147658]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
662ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 978ms |

| 0 / 0 |
