Perlindungan titik akhir selamat bagi rangka kerja Java REST adalah kritikal dan boleh dicapai melalui mekanisme berikut: Pengesahan dan kebenaran: Menggunakan pelayan JWT atau OAuth2 Pengesahan data: Menggunakan pengesahan input dan pengekodan output Pertahanan terhadap serangan: Termasuk perlindungan suntikan SQL, perlindungan CSRF dan hadkan kadar
Dalam konteks dunia berasaskan internet hari ini, melindungi titik akhir API daripada serangan berniat jahat adalah penting. Rangka kerja REST Java menyediakan pelbagai mekanisme untuk menjamin titik akhir, dan artikel ini akan menunjukkan cara memanfaatkan ciri ini untuk perlindungan yang berkesan.
1. Pengesahan dan Kebenaran
JWT (JSON Web Token): Jana token JWT dan gunakannya untuk mengesahkan dan lulus token dalam permintaan untuk mengakses titik akhir yang dilindungi.
@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); }
Pelayan Kebenaran OAuth2: Sepadukan pelayan OAuth2 untuk pengesahan selamat dengan perkhidmatan luaran.
@PostMapping("/oauth2/access-token") public ResponseEntity<String> accessToken(@RequestBody OAuth2Request oauth2Request) { OAuth2Authentication oauth2Authentication = getOAuth2Authentication(oauth2Request); return ResponseEntity.ok(oauth2Authentication.getAccessToken()); }
2. Pengesahan data
Pengesahan input: Gunakan alatan seperti anotasi @Valid
Jackson dan Pengesah Hibernate untuk mengesahkan kandungan permintaan. @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
Jackson atau pustaka lain untuk mengawal keterlihatan medan dalam respons JSON yang dikembalikan.
3. Bertahan daripada serangan
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Perlindungan CSRF:
Gunakan komponenCsrfTokenRepository
Spring Security atau mekanisme lain untuk menghalang serangan pemalsuan permintaan merentas tapak. @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(); }🎜🎜e utentikasi🎜🎜mekanisme utentikasi🎜🎜 🎜Sahkan data input : 🎜
<property name="hibernate.validator.allow_blank_string_parameters" value="false" />🎜🎜🎜Lindungi SQL Injection :🎜
@Bean public CsrfFilter csrfFilter() { return new CsrfFilter(); }🎜🎜🎜Cegah CSRF :🎜rrreee🎜🎜🎜Dengan mengikuti amalan terbaik ini, anda boleh melindungi titik akhir API berasaskan bahasa dalam rangka kerja serangan Java REST secara berkesan. 🎜
Atas ialah kandungan terperinci Perlindungan titik akhir selamat untuk rangka kerja Java REST. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!