La protection sécurisée des points de terminaison du framework Java REST est essentielle et peut être obtenue via les mécanismes suivants : Authentification et autorisation : utilisation du serveur d'autorisation JWT ou OAuth2 Validation des données : utilisation de la validation d'entrée et du codage de sortie Défense contre les attaques : inclut la protection contre les injections SQL et la protection CSRF. et limites de taux
Dans le contexte du monde Internet d'aujourd'hui, la protection des points de terminaison de l'API contre les attaques malveillantes est cruciale. Le framework Java REST fournit divers mécanismes pour sécuriser les points de terminaison, et cet article montrera comment exploiter ces fonctionnalités pour une protection efficace.
1. Authentification et autorisation
JWT (JSON Web Token) : Générez un jeton JWT et utilisez-le pour authentifier et transmettre le jeton dans la demande d'accès au point de terminaison protégé.
@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); }
Serveur d'autorisation OAuth2 : Intégrez le serveur OAuth2 pour une authentification sécurisée avec des services externes.
@PostMapping("/oauth2/access-token") public ResponseEntity<String> accessToken(@RequestBody OAuth2Request oauth2Request) { OAuth2Authentication oauth2Authentication = getOAuth2Authentication(oauth2Request); return ResponseEntity.ok(oauth2Authentication.getAccessToken()); }
2. Validation des données
Validation des entrées : Utilisez des outils tels que l'annotation @Valid
de Jackson et Hibernate Validator pour vérifier le corps de la demande. @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
de Jackson ou d'autres bibliothèques pour contrôler la visibilité des champs dans la réponse JSON renvoyée. 3. Défendez-vous contre les attaques
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Protection CSRF :
Utilisez le composantCsrfTokenRepository
de Spring Security ou d'autres mécanismes pour empêcher les attaques de falsification de requêtes intersites. @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(); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!