Rumah > Java > javaTutorial > teks badan

Perlindungan titik akhir selamat untuk rangka kerja Java REST

WBOY
Lepaskan: 2024-06-01 09:51:03
asal
355 orang telah melayarinya

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

Java REST框架的安全端点保护

Perlindungan Titik Akhir Selamat untuk Rangka Kerja REST Java

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);
    }
    Salin selepas log masuk
  • 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());
    }
    Salin selepas log masuk

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();
    }
    Salin selepas log masuk
  • 输出编码:使用 Jackson 的 @JsonView 注解或其他库来控制返回的 JSON 响应中的字段可见性。

3. 防御攻击

  • SQL 注入保护:使用 Hibernate Validator 等工具确保查询参数中未包含恶意 SQL 语句。

    <property name="hibernate.validator.allow_blank_string_parameters" value="false" />
    Salin selepas log masuk
    Salin selepas log masuk
  • 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);
      }
    }
    Salin selepas log masuk

  • Pengekodan output: Gunakan anotasi @JsonView Jackson atau pustaka lain untuk mengawal keterlihatan medan dalam respons JSON yang dikembalikan.

3. Bertahan daripada serangan

    Perlindungan suntikan SQL:
  1. Gunakan alatan seperti Pengesah Hibernate untuk memastikan parameter pertanyaan tidak mengandungi pernyataan SQL yang berniat jahat.

    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    Salin selepas log masuk

  2. Perlindungan CSRF:

    Gunakan komponen CsrfTokenRepository Spring Security atau mekanisme lain untuk menghalang serangan pemalsuan permintaan merentas tapak.
  3. @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
     @Override
     protected void configure(HttpSecurity http) {
         http
             .authorizeRequests()
             .antMatchers("/login").permitAll()
             .anyRequest().authenticated()
             .and()
             .oauth2Login();
     }
    }
    Salin selepas log masuk
  4. Penghadan Kadar:
  5. Laksanakan mekanisme pengehadan kadar untuk menghalang pelakon yang berniat jahat daripada menyalahgunakan API. Fungsi ini boleh dilaksanakan dalam Spring Boot atau menggunakan perkhidmatan luaran seperti RateLimit.io.
  6. Kes amalan:
  7. Gunakan Spring Boot dan Spring Security untuk melindungi titik akhir REST API:

Tambah pergantungan Spring Security: 🎜
@PostMapping("/create")
public ResponseEntity<Void> create(@RequestBody @Valid User user) {
 return ResponseEntity.created(URI.create("/" + user.getId())).build();
}
Salin selepas log masuk
🎜🎜e utentikasi🎜🎜mekanisme utentikasi🎜🎜 🎜Sahkan data input : 🎜
<property name="hibernate.validator.allow_blank_string_parameters" value="false" />
Salin selepas log masuk
Salin selepas log masuk
🎜🎜🎜Lindungi SQL Injection :🎜
@Bean
public CsrfFilter csrfFilter() {
 return new CsrfFilter();
}
Salin selepas log masuk
🎜🎜🎜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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!