java 지구층 프레임워크 mybatis sql 주입 방지 방법

ql 주입은 모두가 낯설지 않고 흔히 볼 수 있는 공격 방식이다. 공격자는 인터페이스의 폼 정보나 url에 이상한 ql 세션을 입력한다. 예를 들어'or'='1'과 같은 문장은 파라미터 검사가 부족한 응용 프로그램에 침입할 수 있다.그래서 우리의 응용에서 이런 공격 방식을 방지하기 위해 일을 해야 한다.일부 안전성이 매우 높은 응용에서 예를 들어 은행 소프트웨어는 sql문장을 모두 저장 프로세스로 바꾸는 방식을 자주 사용하여 sql의 주입을 방지한다. 이것은 당연히 매우 안전한 방식이지만 우리가 평소에 개발하는 과정에서 이런 융통성이 없는 방식이 필요하지 않을 수도 있다.
mybatis 프레임워크는 반자동화된 지구층 프레임워크로서 그 sql 문장은 우리가 수동으로 작성해야 한다. 이럴 때 당연히 sql 주입을 방지해야 한다.사실 Mybatis의 sql은'입력+출력'기능을 가지고 함수와 유사한 구조로 다음과 같다.

<select id=“getBlogById“ resultType=“Blog“ parameterType=”int”><br>
    select id,title,author,content from blog where id=#{id}
 
</select>
여기,parameterType은 입력한 매개 변수 형식을 표시하고,resultType은 출력된 매개 변수 형식을 표시합니다.위의 문장에 응답합니다. 만약 우리가 sql 주입을 방지하려면 당연히 매개 변수를 입력하는 데 힘을 써야 합니다.위 코드의 하이라이트 부분은 바로 매개 변수가 sql에서 연결된 부분을 입력하여 매개 변수를 전송한 후 실행된 sql 문장을 출력하면 sql가 이렇다는 것을 볼 수 있습니다.

select id,title,author,content from blog where id = ?
어떤 파라미터를 입력하든지 간에 인쇄된 sql은 모두 이렇다.이것은 mybatis가 사전 컴파일링 기능을 사용하기 때문에 sql가 실행되기 전에 위의 sql를 데이터베이스에 전송하여 컴파일합니다. 실행할 때 직접 컴파일된 sql를 사용하여 자리 차지 문자'?'를 대체합니다.됐어.sql 주입은 번역 과정에만 작용할 수 있기 때문에 이런 방식은 sql 주입 문제를 잘 피할 수 있다.
mybatis는 어떻게 sql를 미리 컴파일합니까?사실 프레임워크 밑에 jdbc의 PreparedStatement 클래스가 작용하고 있습니다. PreparedStatement는 우리가 잘 알고 있는 Statement의 하위 클래스입니다. 그 대상은 번역된 sql 문장을 포함합니다.이런'준비'방식은 안전성을 높일 수 있을 뿐만 아니라 여러 번 sql를 실행할 때 효율을 높일 수 있다. 왜냐하면 sql가 이미 컴파일되었기 때문에 다시 실행할 때 다시 컴파일할 필요가 없기 때문이다.
그나저나 우리가 mybatis를 사용하면 반드시 sql 주입을 방지할 수 있습니까?물론 아닙니다. 아래 코드를 보십시오.

<select id=“orderBlog“ resultType=“Blog“ parameterType=”map”>
 
    select id,title,author,content from blog order by ${orderParam}
 
</select>
자세히 살펴보면 내연 매개변수의 형식이 "#{xxx}"에서 ${xxx} 로 변경됩니다.만약 우리가 파라미터 "orderParam"에 "id"를 부여하면 sql를 출력합니다.

select id,title,author,content from blog order by id
분명히 이것은 ql 주입을 막을 수 없습니다.mybatis에서 "${xxx}"형식의 매개 변수는 sql 컴파일에 직접 참여하여 주입 공격을 피할 수 없습니다.그러나 동적 테이블 이름과 열 이름이 관련될 때'${xxx}'라는 매개 변수 형식만 사용할 수 있기 때문에, 이러한 매개 변수는 코드에서 수동으로 처리하여 주입을 방지해야 합니다.
결론: mybatis의 맵 문장을 작성할 때 가능한 한 "#{xxx}"형식을 사용합니다."${xxx}"같은 매개 변수를 사용해야 한다면, sql 주입 공격을 방지하기 위해 수동으로 필터 작업을 해야 합니다.
지금까지 여러분에게 가져온 자바 지구층 프레임워크 mybatis sql 주입 방지 방법의 모든 내용입니다. 많은 응원 부탁드립니다~

좋은 웹페이지 즐겨찾기