본문 바로가기

Spring17

[Spring Boot] 27. PreparedStatement Table Name 적용 지난 번에는 SQL Injection과 관련하여, 다각도로 알아보던 중... PreparedStatement에 대해서 알아보았습니다. 이 경우에는 where 조건절 등 query문에서 변수에 해당하는 부분에 parameter를 binding하는 부분이 전부였습니다. 하지만 다양한 경우가 존재하고... 테이블명 자체를 변수화하여 binding이 필요한 상황이 생길 수 있습니다. 따라서, 이번에는 PreparedStatement에서 테이블명을 변수로 쓰기위한 방법을 알아보겠습니다. PreparedStatement를 사용하게 되면 setString( ) 등을 통해서 관련 값이 그 자체로 전달되는 것이 아닌 ' ' (홑따옴표)로 한번더 감싸져서 넘겨지게 됩니다. 그렇기 때문에 SQL Injection의 방어가 .. 2021. 3. 15.
[Spring Boot] 26. Prevent SQL Injection 지난번에 동적쿼리에 대해서 알아보았습니다. Mybatis에서는 ${ }를 통해서 Parameter를 바로 Binding하는 경우를 동적쿼리(Dynamic Query)라고 합니다. 이런 동적쿼리를 프로그램에 적용했을때, 발생할 수 있는 보안이슈가 바로 SQL Injection 입니다. SQL Injection의 경우는, 이점을 악용해서 권한이 없는 사람이 해당 Application의 전체 데이터를 쿼리해서 볼 수 있고, 경우에 따라서는 해당 DB내 Table의 삭제(Delete)가 가능합니다. 따라서 이 부분을 막을 수 있는 방법에 대해서 여러가지 알아보겠습니다. 1. #{ } 사용하기 (성공) SQL Injection을 막기위해서 가장 완벽한 방법은 prepareStatement를 사용하는 것 입니다. .. 2021. 3. 15.
[Spring Boot] 24. https TLS SSL 적용하기 지금까지 만들어온 Spring Boot 프로젝트는 browser에서 http://localhost:port를 입력해서 접속을 했습니다. 이는 향후 정상적인 DNS를 적용해도 동일합니다. 오늘은 SSL을 적용한 https로 접근하도록 Spring Boot에 적용하는 방법을 알아보겠습니다. 물론 https가 뭔지 SSL이 뭔지를 제대로 알아보기 시작하면 방대한 내용을 알아봐야하겠지만, 그 정의만 위키백과에서 알아보면... "전송 계층 보안 (영어: Transport Layer Security, TLS, 과거 명칭: 보안 소켓 레이어/Secure Sockets Layer, SSL)는 컴퓨터 네트워크에 통신 보안을 제공하기 위해 설계된 암호 규약이다. 그리고 '트랜스포트 레이어 보안'이라는 이름은 '보안 소켓 .. 2020. 1. 11.
[Spring Boot][Error] org.springframework.web.HttpMediaTypeNotSupportedException 아래와 같이 에러가 발생할 때가 있습니다. [Error 명] Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported] 어떤 상황에서 발생을 하는 걸까요?? 이번에 Spring Security 케이스를 구성할때도 발생이 가능합니다. 기존에 REST API를 개발할 때, Controller.java를 개발했었습니다. 그때 코드를 보면... @RequestMapping(value = "/stationMise", method = RequestMethod.POST) public ResponseEntity in.. 2019. 12. 29.