Является ли Java безопасным? - PullRequest
5 голосов
/ 24 марта 2010

Будет ли тот факт, что файлы классов java могут быть декомпилированы, и потребуется ли стороннее программное обеспечение для обфускации каким-либо образом нарушить безопасность?

Ответы [ 9 ]

12 голосов
/ 24 марта 2010

Только если вы действительно полагаетесь на безопасность через неизвестность, что является плохой идеей независимо от языка или платформы.

Если код можно запустить, он может быть переработан.

6 голосов
/ 24 марта 2010

Безопасность Java в основном сводится к защите вашей машины от вредоносного кода.

Не о защите кода от обратного проектирования.

5 голосов
/ 24 марта 2010

«если он работает, он может быть взломан» (в контексте, скажем, антипиратских мер в игре)

4 голосов
/ 24 марта 2010

Да и нет ... да, если вы скомпилируете какие-либо пароли в распространяемую вами Java-программу, тогда да, это не будет безопасным, но опять же, это было бы ужасной вещью в любом программировании язык ... например, в C ++ вы можете восстановить строки, скомпилированные в программу, используя утилиту strings .

Если есть какая-то сверхсекретная вещь, которую вы делаете, то вам, как правило, не следует распространять JAR, который выполняет эту сверхсекретную вещь (хотя «безопасность по неизвестности», как правило, небезопасна). Несмотря на то, что есть определенные базовые вещи, которые вам необходимо знать о безопасности, и с Java можно покончить с собой, тот факт, что Java может быть декомпилирована, на самом деле не является серьезным недостатком безопасности. Я также должен отметить, что в целом у вас меньше шансов столкнуться с проблемами безопасности в Java, поскольку Java защищает вас от доступа к памяти за пределами допустимого диапазона, переполнения буфера, висячих указателей и других проблем с манипулированием указателями.

2 голосов
/ 24 марта 2010

Нет, безопасность в порядке.

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

2 голосов
/ 24 марта 2010

Мое простое мнение таково, что в вычислениях нет ничего 100%

Следовательно, что-то создано, что-то тоже может быть нарушено.

1 голос
/ 24 марта 2010

Декомпиляция - это в основном метод переписывания кода на основе кода. Да, это угроза безопасности, поэтому лучше избегать конфиденциальной информации в классе Java. Что касается логики, то со временем логика любого приложения может быть угадана без фактической декомпиляции.

Декомпиляция Java-класса проста, потому что java хранит информацию высокого уровня для поддержки переносимости.

1 голос
/ 24 марта 2010

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

0 голосов
/ 24 марта 2010

Можно отразить в файле класса и увидеть много данных, не все доступно или скомпилировано в файл класса, и даже больше - просто сахар компилятора.

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