>Java >java지도 시간 >ReadyStatements가 Java에서 SQL 주입을 어떻게 방지할 수 있습니까?

ReadyStatements가 Java에서 SQL 주입을 어떻게 방지할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-24 21:54:17861검색

How Can PreparedStatements Prevent SQL Injection in Java?

SQL 주입 방지: Java에서 문자열 이스케이프

SQL 주입을 방지하려면 입력 문자열을 세심하게 처리해야 합니다. 한 가지 접근 방식은 특수 문자의 악용을 방지하기 위해 기존 문자열을 수정하는 것입니다. 특히 기존 백슬래시()를 로, 따옴표(")를 "로, 아포스트로피(')를 '로, 줄바꿈(n)을 n으로 변환하면 MySQL 데이터베이스 쿼리로 평가할 때 문자열이 무해해집니다.

replacementAll 함수는 이러한 변환을 수행할 수 있지만 백슬래시가 너무 많아 사용법이 복잡해질 수 있습니다. 이 문제를 해결하기 위한 보다 안전한 대안 방법은 ReadyStatements를 활용하는 것입니다.

PreparedStatements는 사용자 입력을 쿼리 문의 매개변수로 처리하여 SQL 삽입 가능성을 제거합니다. 다음 Java 코드 예제를 고려하십시오.

public insertUser(String name, String email) {
   Connection conn = null;
   PreparedStatement stmt = null;
   try {
      conn = setupTheDatabaseConnectionSomehow();
      stmt = conn.prepareStatement("INSERT INTO person (name, email) values (?, ?)");
      stmt.setString(1, name);
      stmt.setString(2, email);
      stmt.executeUpdate();
   }
   finally {
      try {
         if (stmt != null) { stmt.close(); }
      }
      catch (Exception e) {
         // log this error
      }
      try {
         if (conn != null) { conn.close(); }
      }
      catch (Exception e) {
         // log this error
      }
   }
}

이름과 이메일에 포함된 문자에 관계없이 INSERT 문의 무결성을 위협하지 않고 데이터베이스에 안전하게 삽입됩니다.

PreparedStatement 클래스는 특정 데이터 유형에 맞는 다양한 설정 방법을 제공하여 데이터베이스 필드 정의와의 호환성을 보장합니다. 예를 들어, INTEGER 열을 설정하려면 setInt 메소드가 사용됩니다. 사용 가능한 메소드의 전체 목록은 ReadyStatement 문서를 참조하세요.

위 내용은 ReadyStatements가 Java에서 SQL 주입을 어떻게 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.