mybatis의 #과 $의 차이 및 sql 주입 방지 방법
1. # 전송된 데이터를 문자열로 간주하면 자동으로 전송된 데이터에 이중 따옴표가 붙습니다.예: order by #user_id#, 전송된 값이 111이면 sql로 해석될 때의 값은order by'111'이고, 전송된 값이 id이면 sql이order by'id'로 해석됩니다.
2. $는 전송된 데이터를 sql에 직접 표시합니다.예: order by $user_id$, 전송된 값이 111이면 sql로 해석된 값은order by user_id, 만약 전송된 값이 id라면, 해석된 sql은order by id입니다.
3. # 방식은 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>
자바 코드는 당신과 원래의 차이가 많지 않습니다. 사실 나쁠 것도 없습니다. null과'%'를 판단하는 방법을 봉인하면 됩니다.
if (!StringUtil.isEmpty(this.companyName)) {
table.setCompanyName("%" + this.companyName + "%");
}
다음은 mybatis의 #와 $의 차이점, sql 주입을 방지하는 방법에 대한 간단한 이야기입니다. 많은 응원 부탁드립니다~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Mybatis가 키 id를 삽입하는 방법을 되돌려줍니다.mapper의 xml 파일에useGeneratedKeys 구성 KeyProperty를 사용하여 Id로 돌아가면 됩니다. PS: Mybatis의 insert에서 키 ID를 반환하는 방법 1、XyzMapper.xml 또...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.