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

패스워드 부분이 전부 주석처리되어 실행돼서 아이디만 일치하면 로그인이된다.
parameterized query
유저 입력값을 안전하게 바꿔줌

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

ORM


외부입력값이 위치하는 부분을 ? 로 설정하고, 실행시에 해당 파라미터가 전달되도록함으로써 외부의 입력이 쿼리의 구조를 변경시키는 것을 방지할 수 있다.
orm같은 프레임워크를 사용하면 동적쿼리를 정적으로 만들어줘서 sql injection을 예방할 수 있다.
하지만 orm을 사용한다고 완벽하게 안전하지 않다. 공개 취약점에 대한 모니터링이 필요하고 orm의 object의 데이터를 사용자로 부터 받는 경우 입력 값 검증이 필요하다.
자주 쓰이는 injecion용 코드에 쓰이는 특수기호 미리 걸르기
/, –, ‘, “, ?, #, (, ), ;, @, =, , +, union, select, drop, update, from, where, join, substr, user_tables, user_table_columns, information_schema, sysobject, table_schema, declare, dual,…
에러메세지 노출 금지
데이터베이스 에러 발생 시 따로 처리를 해주어 에러가 발생한 테이블명, 컬럼명, 쿼리문이 노출되지 않게 한다.
출처)
https://youtu.be/FoZ2cucLiDs?si=tY8zHEfu-sQsyS6N
https://m.blog.naver.com/PostView.naver?blogId=gs_info&logNo=222322605358&categoryNo=16&proxyReferer=