[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-setevaya-bezopasnost-chto-takoe-owasp-top-10-i-kakie-uyazvimosti-naibolee-aktualny-dlya-java-razrabotchika":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},852,"chto-takoe-owasp-top-10-i-kakie-uyazvimosti-naibolee-aktualny-dlya-java-razrabotchika",24,"setevaya-bezopasnost","Сетевая безопасность","🔒","Что такое OWASP Top 10 и какие уязвимости наиболее актуальны для Java-разработчика?","OWASP Top 10 — регулярно обновляемый список десяти наиболее критичных уязвимостей веб-приложений, публикуемый организацией OWASP (Open Web Application Security Project). Текущая версия — 2021 года.\n\n### A01: Broken Access Control (Нарушение контроля доступа)\n\nПользователь получает доступ к ресурсам, которые ему не положены.\n\n```java\n\u002F\u002F УЯЗВИМЫЙ КОД: нет проверки владельца\n@GetMapping(\"\u002Fapi\u002Faccounts\u002F{id}\")\npublic Account getAccount(@PathVariable Long id) {\n    return accountRepository.findById(id).orElseThrow();\n}\n\n\u002F\u002F БЕЗОПАСНЫЙ КОД: проверка принадлежности\n@GetMapping(\"\u002Fapi\u002Faccounts\u002F{id}\")\npublic Account getAccount(@PathVariable Long id, Authentication auth) {\n    Account account = accountRepository.findById(id).orElseThrow();\n    if (!account.getOwner().equals(auth.getName())) {\n        throw new AccessDeniedException(\"Нет доступа к чужому счёту\");\n    }\n    return account;\n}\n```\n\n### A02: Cryptographic Failures (Криптографические ошибки)\n\n```java\n\u002F\u002F НЕПРАВИЛЬНО\nString hashedPassword = DigestUtils.md5Hex(password); \u002F\u002F MD5 небезопасен!\n\n\u002F\u002F ПРАВИЛЬНО\nString hashedPassword = new BCryptPasswordEncoder(12).encode(password);\n```\n\n### A03: Injection (Внедрение)\n\n```java\n\u002F\u002F УЯЗВИМЫЙ КОД\nString query = \"SELECT * FROM users WHERE login = '\" + userInput + \"'\";\n\n\u002F\u002F БЕЗОПАСНЫЙ КОД: параметризованные запросы\n@Query(\"SELECT u FROM User u WHERE u.login = :login\")\nUser findByLogin(@Param(\"login\") String login);\n```\n\n### A04: Insecure Design (Небезопасный дизайн)\n\nОтсутствие лимитов на операции, недостаточная валидация бизнес-логики.\n\n```java\n\u002F\u002F НЕБЕЗОПАСНО: нет лимита на перебор кодов подтверждения\n@PostMapping(\"\u002Fapi\u002Fconfirm-transfer\")\npublic void confirm(@RequestBody ConfirmRequest request) {\n    if (request.getCode().equals(expectedCode)) { ... }\n}\n\n\u002F\u002F БЕЗОПАСНО: ограничение попыток\n@PostMapping(\"\u002Fapi\u002Fconfirm-transfer\")\npublic void confirm(@RequestBody ConfirmRequest request) {\n    if (attemptCounter.incrementAndGet(request.getTransferId()) > 3) {\n        throw new TooManyAttemptsException(\"Превышен лимит попыток\");\n    }\n    \u002F\u002F ...\n}\n```\n\n### A05: Security Misconfiguration (Неправильная настройка безопасности)\n\n```yaml\n# НЕПРАВИЛЬНО: стандартные настройки в production\nmanagement:\n  endpoints:\n    web:\n      exposure:\n        include: \"*\"    # Все actuator-эндпоинты открыты!\n\n# ПРАВИЛЬНО\nmanagement:\n  endpoints:\n    web:\n      exposure:\n        include: health,info,prometheus\n```\n\n### A07: Cross-Site Scripting (XSS)\n\n```java\n\u002F\u002F УЯЗВИМО: th:utext не экранирует HTML\n\u002F\u002F \u003Cp th:utext=\"${name}\">\u003C\u002Fp>\n\n\u002F\u002F БЕЗОПАСНО: th:text экранирует HTML\n\u002F\u002F \u003Cp th:text=\"${name}\">\u003C\u002Fp>\n```\n\n### A08: Cross-Site Request Forgery (CSRF)\n\n```java\n\u002F\u002F Spring Security: CSRF включён по умолчанию\nhttp.csrf(csrf -> csrf\n    .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())\n);\n\u002F\u002F Для REST API с JWT — CSRF можно отключить\n```\n\n### A10: Server-Side Request Forgery (SSRF)\n\n```java\n\u002F\u002F УЯЗВИМО: пользователь указывает URL\n@GetMapping(\"\u002Fapi\u002Ffetch\")\npublic String fetch(@RequestParam String url) {\n    return restTemplate.getForObject(url, String.class);\n}\n\n\u002F\u002F БЕЗОПАСНО: белый список доменов\nprivate static final Set\u003CString> ALLOWED_HOSTS = Set.of(\"api.cbr.ru\");\n\n@GetMapping(\"\u002Fapi\u002Ffetch\")\npublic String fetch(@RequestParam String url) {\n    URI uri = URI.create(url);\n    if (!ALLOWED_HOSTS.contains(uri.getHost())) {\n        throw new SecurityException(\"Запрещённый хост\");\n    }\n    return restTemplate.getForObject(url, String.class);\n}\n```\n\nЗнание OWASP Top 10 — обязательное требование. Код проходит security review и статический анализ (SonarQube, Checkmarx) перед выходом в production.\n\n> **На собеседовании:** интервьюер хочет услышать не просто перечисление категорий, а конкретные примеры уязвимого и исправленного кода на Java. Частая ошибка — не знать SSRF и Security Misconfiguration (часто спрашивают про открытые Actuator-эндпоинты).","","middle",[15],"network-security",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое OWASP Top 10 и какие уязвимости наиболее актуальны — Gymterview","OWASP Top 10 — регулярно обновляемый список десяти наиболее критичных уязвимостей веб-приложений, публикуемый организацией OWASP (Open Web Application Security ","OWASP Top 10 — регулярно обновляемый список десяти наиболее критичных уязвимостей веб-приложений, публикуемый организаци",[15,13],"OWASP Top 10 — регулярно обновляемый список десяти наиболее критичных уязвимостей веб-приложений, публикуемый организацией OWASP (Open Web Application Security Project). Текущая версия — 2021 года.",true]