>php教程 >PHP开发 >mybatis에서 #과 $의 차이점과 SQL 주입을 방지하는 방법에 대한 간략한 설명

mybatis에서 #과 $의 차이점과 SQL 주입을 방지하는 방법에 대한 간략한 설명

高洛峰
高洛峰원래의
2017-01-05 17:21:491904검색

mybatis의 #과 $의 차이점

1. #들어오는 데이터를 문자열로 처리하고, 자동으로 들어오는 데이터에 큰따옴표를 추가합니다. 예를 들어 order by #user_id#, 전달된 값이 111이면 sql로 구문 분석할 때 값은 전달된 값이 id인 경우 order by "id"입니다. 🎜> 
2.$는 들어오는 데이터를 직접 표시하고 SQL에서 생성합니다. 예: $user_id$별로 정렬, 전달된 값이 111이면 SQL로 구문 분석할 때 값은 user_id별로 정렬됩니다. 전달된 값이 id이면 구문 분석된 SQL은 id별로 정렬됩니다.
 
3.#Method를 사용하면 SQL 주입을 크게 방지할 수 있습니다.
 
4. $ 메소드는 SQL 주입을 방지할 수 없습니다.

5. $ 메서드는 일반적으로 테이블 이름과 같은 데이터베이스 개체를 전달하는 데 사용됩니다.
 
6 일반적으로 $를 사용하지 마세요.

SQL 주입 방지

참고: SQL 문을 select * from t_stu where s_name like '%$name$%'로 작성하지 마세요. 이는 주입 공격에 매우 취약합니다.

"${xxx}" 형식의 매개변수는 SQL 컴파일에 직접 참여하므로 주입 공격을 피할 수 없습니다. 그러나 동적 테이블 이름과 열 이름의 경우 "${xxx}"와 같은 매개변수 형식만 사용할 수 있습니다.

mybatis의 매핑문을 작성할 때 "#{xxx}" 형식을 사용해 보세요. "${xxx}"와 같은 매개변수를 사용해야 하는 경우 SQL 삽입 공격을 방지하려면 매개변수를 수동으로 필터링해야 합니다.

<sql id="condition_where"> 
  <isNotEmpty property="companyName" prepend=" and "> 
    t1.company_name like #companyName# 
  </isNotEmpty> 
</sql>


Java 코드는 원래 코드와 거의 동일합니다. 번거롭다면 null과 '%'를 메소드로 캡슐화하세요

if (!StringUtil.isEmpty(this.companyName)) { 
  table.setCompanyName("%" + this.companyName + "%"); 
}


위는 mybatis에 대한 간략한 설명입니다. by the editor MyBatis의 #과 $의 차이점과 SQL 주입 방지 방법을 모두 다루었습니다. PHP 중국어 웹사이트를 모두 지원해 주시길 바랍니다~

MyBatis의 #과 $의 차이점과 SQL 인젝션 방지 방법에 대한 기사는 PHP 중국어 웹사이트를 참고하세요!


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