> Java > java지도 시간 > 본문

Java EE에 누락된 가장 중요한 10가지 보안 제어

黄舟
풀어 주다: 2017-04-01 10:36:24
원래의
1248명이 탐색했습니다.

JavaEE에는 몇 가지 멋진 내장 보안 메커니즘이 있지만, 적용 범위 XSS(교차 사이트 스크립팅), SQL 주입, CSRF(교차 사이트 요청 위조) 및 XML외부 엔터티(XXE)와 같은 많은 일반적인 공격은 다루지 않습니다. 웹 애플리케이션과 웹 서비스가 이러한 공격에 노출되는 것을 방지하는 것은 가능하지만, 이를 위해서는 어느 정도의 작업과 테스트가 필요합니다. 다행스럽게도 Open Web Application Security Project(OWASP)에서는 "가장 중요한 10가지 위험". "웹 애플리케이션 보안 위험" 보고서.

이러한 주요 위험이 Java EE 웹 애플리케이션 및 웹 서비스에 어떻게 적용되는지 살펴보겠습니다.

1. 주입

개발자가 request.getParameter(), request.getCookie() 또는 request.getHeader()와 같은 신뢰할 수 없는 정보를 얻을 때 주입이 발생합니다. ) 및 명령 인터페이스에서 언제든지 사용하세요. 예를 들어 "SELECT * FROM users WHERE username='" + request.getParameter("user") + "'와 같은 일반 SQL 쿼리에 신뢰할 수 없는 데이터를 연결할 때 SQL 주입이 발생합니다. AND passw ord='" + request.getParameter("pass") = "'"일 때 발생합니다. 개발자는 공격자가 쿼리의 의미를 변경하고 데이터베이스 호스트를 장악하는 것을 방지하기 위해 preparedStatement를 사용해야 합니다. Command 주입, LDAP 주입, Expression Language(EL) 주입 등 다양한 주입 유형이 있는데 모두 매우 위험하므로 이러한 인터프리터에 데이터를 보낼 때 각별히 주의하세요

2. 깨진 인증 및 세션 관리

JavaEE는 인증 및 세션 관리를 지원하지만 여기서는 잘못될 수 있는 일이 많습니다. 인증된 모든 트래픽이 SSL을 통과하는지 확인해야 합니다. JSESSIONID를 노출하면 사용자가 모르는 사이에 사용자 세션을 가로채는 데 사용될 수 있습니다. 세션 고정 공격을 방지하려면 사용자가 인증할 때 JSESSIONID를 회전해야 합니다. 사용자의 JSESSIONID를 URL에 추가하므로 공개나 도난에 더 취약해집니다.

3. XSS(교차 사이트 스크립팅)

XSS는 JavaEE 개발자가 HTTP 요청에서 신뢰할 수 없는 정보를 얻어 인코딩 시 적절한 컨텍스트 출력 없이 이를 HTTP 응답에 넣을 때 발생합니다. 공격자는 이 행동을 악용하여 웹사이트에 스크립트를 삽입한 다음 세션을 하이재킹하고 데이터를 훔칠 수 있습니다. 이러한 공격을 방지하려면 개발자는 민감한 컨텍스트 출력 인코딩을 수행해야 합니다. 데이터를 HTML로 변환하는 경우 x; 형식을 사용하세요. 다양한 문자가 있으면 대괄호가 없는 속성이 종료되므로 HTML 속성을 괄호로 묶어야 합니다. JavaScript, URL, CSS에 신뢰할 수 없는 데이터를 넣은 경우 각각에 대해 적절한 이스케이프 방법을 사용해야 합니다. 그리고 HTML 속성 내에서 Javascript로 작성된 URL과 같은 중첩된 컨텍스트를 처리할 때는 매우 주의해야 합니다. OWASP ESAPI와 같은 코딩 라이브러리에 도움을 줄 수 있습니다.

4. 안전하지 않은 직접 객체 참조

애플리케이션이 데이터베이스 키, 파일 이름 또는 해시과 같은 내부 식별자를 노출할 때마다 🎜>index, 공격자는 이러한 식별자를 조작하여 승인되지 않은 데이터에 액세스하려고 시도할 수 있습니다. 예를 들어, HTTP 요청에서 Java 파일 생성자로 신뢰할 수 없는 데이터를 전달하는 경우 공격자는 "../" 또는 널 바이트 공격을 사용하여 유효성 검사를 속일 수 있습니다. 이러한 유형의 공격을 방지하려면 데이터에 대한 간접 참조를 사용하는 것을 고려해야 합니다. ESAPI 라이브러리는 이러한 간접 참조를 용이하게 하는 ReferenceMap을 지원합니다.

5. 잘못된 보안 구성

최신 JavaEE 애플리케이션과 Struts 및 Spring과 같은 프레임워크에는 보안 설정이 많습니다. 보안 설정을 살펴보고 원하는 방식으로 설정했는지 확인하세요. 예를 들어, 태그에 주의하세요. 이는 보안 제약 조건 이 나열된 메서드에만 적용되므로 공격자가 HEAD 및 PUT와 같은 다른 HTTP 메서드를 사용하여 전체 보안 제약 조건을 우회할 수 있음을 나타냅니다. web.xml에서 태그를 제거해야 할 수도 있습니다.

6. 민감한 데이터 노출

Java에는 암호화 라이브러리가 많지만 올바르게 사용하기가 쉽지 않습니다. 유용한 암호화 방법을 쉽고 안전하게 제공하는 JCE 기반 라이브러리를 찾아야 합니다. 예를 들어 Jasypt와 ESAPI가 그러한 라이브러리입니다. 암호화에는 AES, 해시에는 SHA256과 같은 강력한 알고리즘을 사용해야 합니다. 하지만 비밀번호 해시는 Rainbow Table을 사용하여 해독할 수 있으므로 주의해야 합니다. 따라서 bcrypt 또는 PBKDF2와 같은 적응형 알고리즘을 사용하세요.

7. 기능 수준 부족

액세스 제어

JavaEE는 선언적 및 절차적 액세스 제어를 지원하지만 여전히 많은 애플리케이션이 자체 솔루션을 만드는 것을 선택합니다. Spring 프레임워크에는

주석 을 기반으로 하는 액세스 제어 기본 요소도 있습니다. 가장 중요한 것은 노출된 모든 포트에 웹 서비스를 포함하여 적절한 액세스 제어 검사가 있는지 확인하는 것입니다. 공격자가 엔드포인트에 직접 액세스할 수 있으므로 클라이언트가 무엇이든 제어할 수 있다고 가정하지 마십시오.

8. 크로스 사이트 요청 위조(CSRF)

상태를 변경하는 각 엔드포인트는 요청이 위조되었는지 확인해야 합니다. 개발자는 각 사용자의 세션에 임의의 토큰을 넣은 다음 요청이 도착하면 유효성을 검사해야 합니다. 그렇지 않으면 공격자는 보호되지 않는 애플리케이션에 연결된 악성 IMG, SCRIPT, FRAME 또는 FORM 태그를 통해 "공격" 페이지를 생성할 수 있습니다. 피해자가 이러한 페이지를 볼 때 브라우저는 피해자의 인증 정보를 자동으로 포함하여 태그에 지정된 URL에 대한 "가짜" HTTP 요청을 생성합니다.

9. 알려진 취약점이 있는 구성 요소 사용

최신 JavaEE 애플리케이션에는 수백 개의 라이브러리가 있습니다. Maven과 같은 종속성 해결 도구로 인해 지난 5년 동안 이 숫자가 폭발적으로 증가했습니다. 널리 사용되는 많은 Java 라이브러리에는 웹 애플리케이션을 완전히 파괴할 수 있는 알려진 취약점이 있습니다. 해결책은

제때 라이브러리를 업데이트하는 것입니다. 매일 새로운 취약점이 공개되므로 단일 검사만 실행하지 마십시오.

10. 검증되지 않은 리디렉션 및 전달

응답 .sendRedirect()를 호출할 때 애플리케이션이 request.getParameter() 또는 request.getCookie()와 같은 신뢰할 수 없는 데이터를 사용할 때마다 공격자는 다음을 수행할 수 있습니다. 악성코드를

설치할 목적으로 피해자의 브라우저를 신뢰할 수 없는 웹사이트로 강제 이동시킵니다. 전달은 공격자가 관리 페이지와 같은 승인되지 않은 기능으로 자신을 전달할 수 있다는 점을 제외하면 유사한 문제를 나타냅니다. 리디렉션 및 전달 대상을 다시 확인하세요.

이러한 문제에 계속해서 관심을 기울여야 합니다. 새로운 공격과 취약점이 계속해서 발견되고 있습니다. 이상적으로는 보안 검사를 기존 빌드, 테스트 및 배포 프로세스에 통합할 수 있습니다.

애플리케이션에서 이러한 문제를 확인하려면

Eclipse용 무료 Contrast 플러그인을 사용해 보세요. 이는 단순한 정적 분석 도구가 아닙니다. 대신 C4E는 Java 계측 API를 활용하여 애플리케이션의 보안과 관련된 모든 것을 모니터링합니다. C4E는 실시간으로 완전한 데이터 흐름 분석도 수행할 수 있으므로 복잡한 애플리케이션을 통해 요청에서 데이터를 추적할 수 있습니다. 예를 들어, 코드가 매개변수 값을 취하고, 이를 base64로 디코딩하고, 이를 맵에 저장하고, 맵을 데이터 bean에 넣고, JSP의 세션 속성에 bean을 저장한다고 가정합니다. 값을 입력하고 EL을 사용하여 이 값을 웹페이지에 삽입합니다. Contrast for Eclipse는 이 데이터를 추적하고 XSS 취약점을 보고할 수 있습니다. 복잡한 프레임워크와 라이브러리를 사용하는 경우에도 마찬가지입니다. 다른 어떤 도구도 이 속도, 정확성 및 사용 편의성을 따라올 수 없습니다.

Eclipse Marketplace에서 Contrast for Eclipse를 찾을 수 있습니다. 그런 다음 서버 탭 "대비로 시작"으로 이동하면 나머지 작업이 자동으로 수행됩니다.

위 내용은 Java EE에 누락된 가장 중요한 10가지 보안 제어의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!