 |
Руководство для программиста на Java: 75 рекомендаций по написанию надежных и защищенных программ
рекомендуем
Фрэд Лонг, Дхрув Мохиндра, Роберт С. Сикорд, Дин Ф. Сазерленд, Дэвид Свобода
Год выпуска: 2014
Изд-во: Диалектика-Вильямс
ISBN: 978-5-8459-1897-0
Переплёт: мягкий
256 страниц
Цена: 255.00 грн. Есть в наличии На 1 книгуОтправка: Новой Почтой - 27 мая
|
"Каждый разработчик несет ответственность за авторство кода, свободного от уязвимостей в защите. В этой книге представлены реалистичные рекомендации, помогающие разработчикам реализовывать требуемые функциональные возможности для обеспечения безопасности, надежности и сопровождения разрабатываемых программ." Мэри Энн Дэвидсон, начальник службы информационной безопасности компании Oracle
Книга "Руководство для программиста на Java: 75 рекомендаций по написанию надежных и защищенных программ" составлена из 75 рекомендаций по надежному, безопасному и корректному написанию кода на Java. В этой книге представлены 75 рекомендаций в согласованной и понятной форме. Каждая рекомендация составлена авторами по одному и тому же образцу:
- постановка задачи, - анализ примера кода, не соответствующего принятым нормам программирования на Java, - рассмотрение предлагаемого решения, соответствующего принятым нормам, - краткое изложение применимости рекомендации - ссылки на дополнительную литературу.
Представленные рекомендации отражают опыт, накопленный в области безопасного и надежного программирования на Java, и поэтому они будут полезны всем, кто занимается разработкой программ на этом языке программирования. В этой книге читатель может ознакомиться с передовыми методиками повышения надежности и ясности исходного кода, а также с типичными ложными представлениями программирующих на Java, которым посвящена отдельная глава книги и которые нередко приводят к написанию неоптимального кода.
Во многих организациях во всем мире программы на Java применяются для решения критически важных задач, а следовательно, их исходный код должен быть надежным, безопасным, быстрым и удобным для сопровождения. В рекомендациях, представленных в этой книге, собран практический опыт и примеры программирования на Java, помогающие удовлетворять потребности разработчиков. Эта книга, написанная по такому же образцу, как и справочное руководство The CERT® Oracle® Secure Coding Standard for Java™, служит его расширением, направленным на решение многих вопросов повышения безопасности и качества исходного кода на Java.
Для каждой рекомендации указаны условия соответствия, приведены примеры кода, не соответствующего принятым нормам программирования на Java, а также представлены решения, соответствующие принятым нормам. Авторы книги доходчиво поясняют, когда именно следует применять каждую рекомендацию, а также дают ссылки на дополнительные источники информации.
Отражая передовой опыт в области обеспечения безопасности программ на Java, это справочное руководство предоставляет усовершенствованные методики защиты подобных программ от злонамеренных атак и прочих неожиданных явлений. Читатель получает возможность ознакомиться с передовыми методиками повышения надежности и ясности исходного кода, а также с типичными ложными представлениями программирующих на Java, которым посвящена отдельная глава книги и которые нередко приводят к написанию неоптимального кода.
С предисловием Джеймса А. Гослинга, родоначальника языка программирования Java.
Книга "Руководство для программиста на Java: 75 рекомендаций по написанию надежных и защищенных программ" рассчитана на тех, кто имеет определенный опыт написания кода на Java.
Об авторах: Фрэд Лонг - преподаватель кафедры вычислительной техники в Университете Аберистуита, Великобритания. Он посещает Институт программотехники в США с 1992 года, тесно сотрудничая с его учеными. Дхрув Мохиндра - ведущий специалист в группе, подчиненной руководителю технического отдела компании Persistent Systems Limited, India, где он консультирует по вопросам информационной безопасности в самых разных сферах деятельности, включая глобальную сеть, банковское дело и финансы, кооперацию, телекоммуникации, промышленные предприятия, мобильную связь, науки о живой природе и здравоохранение. Роберт С. Сикорд - автор нескольких книг по компьютерной безопасности и программотехнике, а также технический руководитель по безопасному программированию в отделе CERT Института программотехники (SEI) Карнеги-Меллона в г. Питтсбург, шт. Пенсильвания. Дин Сазерленд - старший инженер по безопасности программного обеспечения в организации CERT, а прежде он занимался оптимизацией компиляторов в компании Tartan, Inc. Дэвид Свобода - инженер по безопасности программного обеспечения в отделе CERT Института программотехники (SEI) Карнеги-Меллона, где он участвовал в качестве ведущего разработчика программного обеспечения в различных проектах данной организации.
Содержание книги "Руководство для программиста на Java: 75 рекомендаций по написанию надежных и защищенных программ"
Предисловие 10 Введение 11 Безопасное программирование на Java 12 Предмет книги 13 Благодарности 17 Об авторах 19 От издательства 22 Глава 1. Безопасность 23 1. Ограничивайте срок действия уязвимых данных 24 2. Не храните уязвимые данные незашифрованными на стороне клиента 27 3. Снабжайте уязвимые изменяемые классы немодифицируемыми оболочками 30 4. Вызывайте уязвимые для безопасности методы с проверенными аргументами 32 5. Не допускайте выгрузку произвольных файлов 33 6. Кодируйте или экранируйте выводимые данные надлежащим образом 36 7. Предотвращайте внедрение кода 40 8. Предотвращайте внедрение операторов XPath 42 9. Предотвращайте внедрение операторов LDAP 46 10. Не пользуйтесь методом clone() для копирования небезопасных параметров метода 49 11. Не пользуйтесь методом Object.equals() для сравнения ключей шифрования 52 12. Не пользуйтесь небезопасными или слабыми алгоритмами шифрования 53 13. Храните пароли с помощью хеш-функции 54 14. Обеспечьте подходящее начальное случайное значение для класса SecureRandom 59 15. Не полагайтесь на методы, которые могут быть переопределены в ненадежном коде 60 16. Старайтесь не предоставлять излишние полномочия 66 17. Сводите к минимуму объем привилегированного кода 69 18. Не раскрывайте методы с нестрогими проверками ненадежного кода 70 19. Определяйте специальные полномочия доступа для мелкоструктурной защиты 78 20. Создавайте безопасную "песочницу", используя диспетчер защиты 81 21. Не допускайте злоупотреблений привилегиями методов обратного вызова в ненадежном коде 85 Глава 2. Защитное программирование 91 22. Минимизируйте область действия переменных 92 24. Минимизируйте доступность классов и их членов 96 25. Документируйте потоковую безопасность и пользуйтесь аннотациями везде, где только можно 100 26. Всегда предоставляйте отклик на результирующее значение метода 106 27. Распознавайте файлы, используя несколько файловых атрибутов 109 28. Не присоединяйте значимость к порядковому значению, связанному с перечислением 115 29. Принимайте во внимание числовое продвижение типов 117 30. Активизируйте проверку типов в методах с переменным количеством аргументов во время компиляции 121 31. Не объявляйте открытыми и конечными константы, значения которых могут измениться в последующих выпусках программы 123 32. Избегайте циклических зависимостей пакетов 126 33. Отдавайте предпочтение определяемым пользователем исключениям над более общими типами исключений 128 34. Старайтесь изящно исправлять системные ошибки 130 35. Тщательно разрабатывайте интерфейсы, прежде чем их выпускать 132 36. Пишите код, удобный для "сборки мусора" 135 Глава 3. Надежность 139 37. Не затеняйте и не заслоняйте идентификаторы в подобластях действия 140 38. Не указывайте в одном объявлении больше одной переменной 142 39. Пользуйтесь описательными символическими константами для обозначения литеральных значений в логике программы 145 40. Правильно кодируйте отношения в определениях констант 148 41. Возвращайте из методов пустой массив или коллекцию вместо пустого значения 149 42. Пользуйтесь исключениями только в особых случаях 152 43. Пользуйтесь оператором try с ресурсами для безопасного обращения с закрываемыми ресурсами 154 44. Не пользуйтесь утверждениями для проверки отсутствия ошибок при выполнении 157 45. Пользуйтесь вторым и третьим однотипными операндами в условных выражениях 158 46. Не выполняйте сериализацию прямых описателей системных ресурсов 162 47. Отдавайте предпочтение итераторам над перечислениями 164 48. Не пользуйтесь прямыми буферами для хранения нечасто используемых объектов с коротким сроком действия 166 49. Удаляйте объекты с коротким сроком действия из контейнерных объектов с длительным сроком действия 167 Глава 4. Понятность программ 171 50. Будьте внимательны, применяя визуально дезориентирующие идентификаторы и литералы 171 51. Избегайте неоднозначной перегрузки методов с переменным количеством аргументов 175 52. Избегайте внутренних индикаторов ошибок 177 53. Не выполняйте операции присваивания в условных выражениях 179 54. Пользуйтесь фигурными скобками в теле условного оператора if, а также циклов for или while 181 55. Не ставьте точку с запятой сразу после условного выражения с оператором if, for или while 183 56. Завершайте каждый набор операторов, связанных с меткой case, оператором break 184 57. Избегайте неумышленного зацикливания счетчиков циклов 186 58. Пользуйтесь круглыми скобками для обозначения операций предшествования 188 59. Не делайте никаких предположений о создании файлов 190 60. Преобразуйте целые значения в значения с плавающей точкой для выполнения операций с плавающей точкой 192 61. Непременно вызывайте метод super.clone() из метода clone() 195 62. Употребляйте комментарии единообразно и в удобном для чтения виде 197 63. Выявляйте и удаляйте излишний код и значения 198 64. Стремитесь к логической полноте 202 65. Избегайте неоднозначной или вносящей путаницу перегрузки 205 Глава 5. Ложные представления программистов 209 66. Не принимайте на веру, что объявление изменчивой ссылки гарантировало надежную публикацию членов объекта, доступного по этой ссылке 209 67. Не принимайте на веру, что методы sleep(), yield() или getState() предоставляли семантику синхронизации 215 68. Не принимайте на веру, что оператор вычисления остатка всегда возвращал неотрицательный результат для целочисленных операндов 219 69. Не путайте равенство абстрактных объектов с равенством ссылок 220 70. Ясно различайте поразрядные и логические операторы 223 71. Правильно интерпретируйте управляющие символы при загрузке строк 226 72. Не пользуйтесь перегружаемыми методами для динамического различения типов данных 229 73. Не путайте неизменяемость ссылки и доступного по ссылке объекта 231 74. Аккуратно пользуйтесь методами сериализации writeUnshared() и readUnshared() 235 75. Не пытайтесь оказывать помощь системе "сборки мусора", устанавливая пустое значение в локальных переменных ссылочного типа 239 Приложение А. Android 241 Приложение Б. Словарь специальных терминов 245 Приложение В. Библиография 249 Предметный указатель 255
|