SQL Injection

김채현·2023년 12월 20일

sql injection이란

악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 sql문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위이다.

sql injection 예시

  • 강제로그인

패스워드 부분이 전부 주석처리되어 실행돼서 아이디만 일치하면 로그인이된다.

sql injection 예방

  1. parameterized query
    유저 입력값을 안전하게 바꿔줌

  2. stored procedure
    코드양이 늘어날 수 있음

  3. ORM


    외부입력값이 위치하는 부분을 ? 로 설정하고, 실행시에 해당 파라미터가 전달되도록함으로써 외부의 입력이 쿼리의 구조를 변경시키는 것을 방지할 수 있다.
    orm같은 프레임워크를 사용하면 동적쿼리를 정적으로 만들어줘서 sql injection을 예방할 수 있다.
    하지만 orm을 사용한다고 완벽하게 안전하지 않다. 공개 취약점에 대한 모니터링이 필요하고 orm의 object의 데이터를 사용자로 부터 받는 경우 입력 값 검증이 필요하다.

  1. 자주 쓰이는 injecion용 코드에 쓰이는 특수기호 미리 걸르기
    /, –, ‘, “, ?, #, (, ), ;, @, =, , +, union, select, drop, update, from, where, join, substr, user_tables, user_table_columns, information_schema, sysobject, table_schema, declare, dual,…

  2. 에러메세지 노출 금지
    데이터베이스 에러 발생 시 따로 처리를 해주어 에러가 발생한 테이블명, 컬럼명, 쿼리문이 노출되지 않게 한다.

출처)
https://youtu.be/FoZ2cucLiDs?si=tY8zHEfu-sQsyS6N
https://m.blog.naver.com/PostView.naver?blogId=gs_info&logNo=222322605358&categoryNo=16&proxyReferer=

0개의 댓글