SQL Injection 방지
★ mybatis에서 #{ }과 ${ }을 사용 시 신중히 사용해야한다!
되도록 #{ }을 이용하는 것이 좋다
#{ }
파라미터가 String 형식으로 들어가 자동적으로 SQL에서는 '파라미터' 형식으로 들어간다.
쿼리 주입을 예방할 수 있어 보안 측면에서 유리한 점이 있다.
${ }
파라미터가 바로 출력된다.
해당 컬럼의 자료형에 맞추어 파라미터의 자료형이 변경된다.
쿼리 주입(SQL Injection, SQL 삽입 공격)을 예방할 수 없어 보안 측면에서 불리하다.
해당 내용은 이 게시글에서 볼 수 있다.
문자열이 아닌 자체로 SQL로 인식하기 때문에 WHERE 조건에
OR 1=1이라는 조건을 넣으면 모든 결과를 가져오는 결과를 얻을 수 있기 때문에 사용자가 입력하는 항목에 신중하게 작성이 필요하다.
데이터 출력(c:out 태그)
★ el태그로 가져오는 데이터는 c:out 형태로 가져올 것!
java에서 model ${데이터} 로 출력할 시 문자열로 출력하는 것이 아니기 때문에 만약에
<script>alert()</script>
를 DB에 넣어서 가져온 경우에 alert()창이 뜨는 것을 확인할 수 있다.
이 점을 막기 위해서
<c:out value="${데이터}"/>
해당 형식으로 가져와야 문자열형식으로 가져오게 된다.
게시판 수정
★ Controller에서 자신이 작성했는 지 여부 파악
게시판은 번호로 지정되기 때문에 만약 자신이 작성되지 않은 것임에도 번호만 변경해
수정할 경우 수정되는 현상이 발생 할 수 있다.
그러므로 Controller에서 해당 게시글을 썼는지 로그인한 정보를 통해 아이디를 비교 하고 만약 자신이 쓴 글이 아니라면 수정할 수 없도록 하는 작업을 수행 해야된다.
파일 업로드
★ 파일 업로드는 resources폴더에 저장하지 않을 것
파일 업로드 시 만약에 JSP같은 파일이 web/resources파일에 들어간다면
간단히 url resource/ 경로를 통해 jsp파일을 가져올 수 있다.
그 jsp파일에 만약에 해당 컴퓨터의 폴더의 정보를 가져갈 수 있는 위험이 존재한다.
그러므로 파일은 resources폴더에 저장해선 안된다
resources폴더는 다른사람에게 보여져도 되는 그런 류만 저장한다
주문
★ 주문에 대한 결과값을 검증하는 기능을 추가하여
제대로 결제가 되었는 지 파악할 것!
우리 프로젝트에는 주문이라는 시스템이 있기 때문에 최종의로 결제하는 과정을 거치게 된다
그 때 결제 전에 결제되는 값을 web console로 변경시킬 경우 문제가 생길 수 있다
그러므로 결제되는 값을 검증하는 과정을 통해 올바른 값이 결제가 되었는지 파악을 한 후에 결제를 하거나
결제가 되고 검증을 한 이후 취소하는 작업을 넣어야한다.
결론
프로젝트의 완성에 쫓겨 무조건 기능이 완성된다는 관점만 생각해 기능만 잘 작동하는 지에 대해서만 집중하였는데 해킹에 대한 관점으로 보면 취약한 점이 많다는 것을 알게 되었다.
모든 해킹이 발생할 수 있는 항목에 대해서 지금부터 전부 수정하는 것은 불가능 하지만, 다음 프로젝트를 수행할 때는 이러한 점을 모두 고려하도록 설정해야겠다
'Project' 카테고리의 다른 글
개인 프로젝트 - 1. 프로젝트 생성 (0) | 2024.11.01 |
---|---|
ERP 프로젝트 - 트랜잭션 처리 (0) | 2024.10.25 |
ERP 프로젝트 - FullCalendar (1) | 2024.10.11 |
ERP 프로젝트 - 최저가 표 (0) | 2024.10.11 |
ERP 프로젝트 - 오라클 함수 FN (0) | 2024.10.11 |