Java REST フレームワークの安全なエンドポイント保護は重要であり、次のメカニズムを通じて実現できます: 認証と認可: JWT または OAuth2 認可サーバーの使用 データ検証: 入力検証と出力エンコーディングの使用 攻撃に対する防御: SQL インジェクション保護、CSRF 保護を含む制限事項
今日のインターネットベースの世界では、悪意のある攻撃から API エンドポイントを保護することが重要です。 Java REST フレームワークは、エンドポイントを保護するためのさまざまなメカニズムを提供します。この記事では、これらの機能を活用して効果的な保護を行う方法を説明します。
1. 認証と認可
JWT (JSON Web トークン): 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. 攻撃から防御する
SQL インジェクション保護:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Spring Security の CsrfTokenRepository
コンポーネントまたはその他のメカニズムを使用して、クロスサイト リクエスト フォージェリ攻撃を防ぎます。
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) { http .authorizeRequests() .antMatchers("/login").permitAll() .anyRequest().authenticated() .and() .oauth2Login(); } }
レート制限:
悪意のある行為者による API の悪用を防ぐためにレート制限メカニズムを実装します。この機能は、Spring Boot で実装することも、RateLimit.io などの外部サービスを使用して実装することもできます。Spring Boot と Spring Security を使用して REST API エンドポイントを保護する:
Spring Security の依存関係を追加する:
@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 中国語 Web サイトの他の関連記事を参照してください。