Java REST 프레임워크의 안전한 엔드포인트 보호는 중요하며 다음 메커니즘을 통해 달성할 수 있습니다. 인증 및 권한 부여: JWT 또는 OAuth2 권한 부여 서버 사용 데이터 유효성 검사: 입력 유효성 검사 및 출력 인코딩 사용 공격 방어: SQL 주입 보호, CSRF 보호 포함 및 속도 제한
오늘날의 인터넷 기반 세계에서는 악의적인 공격으로부터 API 엔드포인트를 보호하는 것이 중요합니다. Java REST 프레임워크는 엔드포인트를 보호하기 위한 다양한 메커니즘을 제공하며, 이 문서에서는 효과적인 보호를 위해 이러한 기능을 활용하는 방법을 보여줍니다.
1. 인증 및 승인
JWT(JSON 웹 토큰): JWT 토큰을 생성하고 이를 사용하여 보호된 엔드포인트에 액세스하기 위한 요청에서 토큰을 인증하고 전달합니다.
@PostMapping("/login") public ResponseEntity<String> login(@RequestBody User user) { String jwt = Jwts.builder() .setSubject(user.getUsername()) .setExpiration(Date.from(Instant.now().plusMillis(60000L))) .signWith(SignatureAlgorithm.HS256, "secretkey") .compact(); return ResponseEntity.ok(jwt); }
OAuth2 인증 서버: 외부 서비스와의 보안 인증을 위해 OAuth2 서버를 통합합니다.
@PostMapping("/oauth2/access-token") public ResponseEntity<String> accessToken(@RequestBody OAuth2Request oauth2Request) { OAuth2Authentication oauth2Authentication = getOAuth2Authentication(oauth2Request); return ResponseEntity.ok(oauth2Authentication.getAccessToken()); }
2. 데이터 검증
입력 검증: Jackson의 @Valid
주석 및 Hibernate Validator와 같은 도구를 사용하여 요청 본문을 확인하세요. @Valid
注解和 Hibernate Validator 等工具来验证请求正文。
@PostMapping("/create") public ResponseEntity<Void> create(@RequestBody @Valid User user) { // 用户对象被自动验证。 return ResponseEntity.created(URI.create("/" + user.getId())).build(); }
@JsonView
注解或其他库来控制返回的 JSON 响应中的字段可见性。3. 防御攻击
SQL 注入保护:使用 Hibernate Validator 等工具确保查询参数中未包含恶意 SQL 语句。
<property name="hibernate.validator.allow_blank_string_parameters" value="false" />
CSRF 保护:使用 Spring Security 的 CsrfTokenRepository
public class CsrfFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName()); if (token == null || !token.getToken().equals(request.getHeader("X-CSRF-Token"))) { throw new InvalidCsrfTokenException("Invalid CSRF token"); } filterChain.doFilter(request, response); } }
@JsonView
주석 또는 기타 라이브러리를 사용하여 반환된 JSON 응답에서 필드 가시성을 제어합니다. 3. 공격으로부터 방어하세요
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
CSRF 보호:
Spring Security의CsrfTokenRepository
구성 요소 또는 기타 메커니즘을 사용하여 사이트 간 요청 위조 공격을 방지하세요. @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) { http .authorizeRequests() .antMatchers("/login").permitAll() .anyRequest().authenticated() .and() .oauth2Login(); } }
@PostMapping("/create") public ResponseEntity<Void> create(@RequestBody @Valid User user) { return ResponseEntity.created(URI.create("/" + user.getId())).build(); }
<property name="hibernate.validator.allow_blank_string_parameters" value="false" />
@Bean public CsrfFilter csrfFilter() { return new CsrfFilter(); }
위 내용은 Java REST 프레임워크를 위한 안전한 엔드포인트 보호의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!