Почему финальная строка делает приложение более безопасным? - PullRequest
1 голос
/ 20 февраля 2020

В течение некоторого времени я пытаюсь понять, как работает String, и я не понимаю аспект безопасности.

"В случае, если String не является неизменяемым, это может привести к серьезной угрозе безопасности. Я имею в виду, что кто-то может получить доступ к любому файлу, для которого у него есть авторизация, а затем может изменить имя файла намеренно или случайно и получить доступ к этому файлу. Из-за неизменности вам не нужно беспокоиться об угрозах такого рода. Эта причина также горит тем, почему String является окончательной в Java, делая java .lang.String final, Java дизайнер гарантировал, что никто не отменяет поведение класса String. "

https://javarevisited.blogspot.com/2010/10/why-string-is-immutable-or-final-in-java.html

Строка является неизменной, поэтому новый объект создается, когда мы пытаемся редактировать и переменная типа String имеет новую ссылку. Если мы можем обменяться ссылками, как это безопасно? Кто-то может сделать это и получить доступ к тому, на что у него нет прав. Или, может быть, я не правильно понимаю это?

Редактировать: Может быть, я должен перефразировать свой вопрос. Если бы String был изменчивым, как могла бы выглядеть угроза безопасности? Кто-то может получить доступ к пулу строк и изменить значение там и так, например, может быть предоставлен несанкционированный доступ к какому-либо файлу?

1 Ответ

0 голосов
/ 20 февраля 2020

Ключевое слово final содержит рекомендацию.

Класс String не помечен как final, чтобы сделать программу более безопасной. Он помечен таким образом, потому что это базовая языковая функция, и поэтому программисты не пытаются ее редактировать. Редактирование или расширение функциональности может изменить работу этой базовой функции и сделать поведение программы непредсказуемым, поскольку язык зависит от того, какой класс String запрограммирован таким, каким он был изначально.

Любой класс может быть изменен, если кто-то настаивает на этом, используя Reflection . Однако продлить окончательный класс не представляется возможным.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...