orm이 있다고 sql injection에 안전할까?

연쇄코딩마·2023년 1월 13일
0

난 아직도 주사를 참 싫어한다. 저 바늘을 보라 정말 싫지 않은가?

서론

어제 연사의 경험을 들었는데 신입일때 실수담을 이야기를 했었는데 순수 nodejs 어플을 프로젝트로 진행했었는데 sql injection에 대응하는 미들웨어를 사용하지 않아서 곤란했던 이야기를 해줬다. 먼가 머리를 확 때렸다. 나는 이런 생각을 해본적이 있나? sql injection 고려해본적이 있나? 한번 생각해보는 시간이 됐다.

본론 부터 이야기하자면!!

orm을 안 쓰고 raw한 쿼리를 사용한다든가 사용하더라도 실수와 구버전이라면 뚫릴수 있다고 한다. 한가지 예를 들어보자

이 스크린샷의 예제를 보면 ; 뒤에 drop table users 같은 쿼리로 공격을 할 수도 있다. 작은 따옴표와 )) AS DECIMAL) 가 함께 전달된다면 악용될 소지가 있다(? 왜 그런지는 아직 잘 이해를 못했습니다. 누구 댓글로 알려주세요! ㅜ)

참조 : 레퍼런스

예방

  • 위험 코드 쓰지 않기 : 이건 당연한거지만 코드를 쓸때 위험 코드를 쓰지말아야 한다.
    예 :
//위험한코드
db.query(`Select * FROM topic Where id=${custom_id}, function(err,result){});

//보안 코드
db.query(`Select * FROM topic Where id=?,[custom.id], function(err,result){});

이런 식으로 두번째 인자로 등장하는 배열이 첫번째 인자의 ?으로 대응되어야 한다.

  • vaildation을 잘 활용하여 입력값에 대한 검증을 필수 적으로 해야한다.
    class-vaildation등 훌륭한 라이브러리들도 많고 직접 만들수도 있다.

  • sql 오류 발생시 직접적인 오류 메세지 클라이언트로 유출 금지

등등이다.

결론

결론은 orm을 쓰더라도 취약점은 있으나 안쓰는 것보다 낫다는 것이다. 지금 사용하는 TypeOrm의 쿼리빌더는 어떨까 생각해보고 자료를 찾아 봤는데 raw를 사용하더라도 query builder를 사용하면 된단다. 잘만 머리에 넣으면 된다는 소리!!!!

참고 : https://it-timehacker.tistory.com/180
https://snyk.io/blog/sequelize-orm-npm-library-found-vulnerable-to-sql-injection-attacks/

profile
只要功夫深,铁杵磨成针

0개의 댓글