Руководства Безопасность и дизайн в значительной степени описывают различные методы, чтобы сделать его более трудным для компрометации реализации биллинга в приложении.
Особо отмечено, насколько легко обратное проектирование файла .apk
, даже если оно запутано через Proguard. Поэтому они даже рекомендуют модифицировать все примеры кода приложения, особенно "известные точки входа и точки выхода".
То, что я считаю отсутствующим, - это любая ссылка на обертку определенных методов проверки в одном методе, например, статический Security.verify()
, который возвращает boolean
: хорошая практика проектирования (сокращение дублирования кода, многократное повторное использование, упрощение отладки, документирование и т.д.), но все, что нужно сделать злоумышленнику, это определить этот метод и заставить его всегда возвращать true
... Поэтому, независимо от того, сколько раз я использовал его, откладывал или не откладывал, случайно или нет, Это важно.
С другой стороны, у Java нет макросов, как в C/С++, что позволяет уменьшить дублирование исходного кода, но не имеет единственной точки выхода для функции verify()
.
Итак, мои вопросы:
Есть ли противоречие между хорошо известной практикой разработки программного обеспечения и кодирования и дизайном для так называемой безопасности? (в контексте Java/Android/безопасных транзакций как минимум)
Что можно сделать для смягчения побочных эффектов "дизайна для безопасности", который кажется "стрельбой в ногу" с точки зрения чрезмерно усложняющего программного обеспечения, которое могло быть проще, удобнее и легче отлаживать?
Можете ли вы порекомендовать хорошие источники для дальнейшего изучения этого вопроса?