본문 바로가기

SpringBoot47

[Spring Boot][Error] blocked by CORS policy 지난 번에 vue project와 springboot project의 결함에 대해서 알아보았습니다. Vue는 SPA (Single Page Application)을 구현해 주는 프로젝트이며, springboot와 결함함으로써 Frontend와 Backend의 일원화를 가능하게 해 줍니다. 해당 Project를 build하여 서버에 구성하기 위해서는 다음의 절차를 거치게 됩니다. vue project를 npm으로 build실행 - npm run build build의 결과는 project > config > index.js에 정의되어 있는 경로로 이동 springboot project를 build 및 run 따라서 개발자는 개발하는 단계에서 vue project에 뭐라도 살짝 건드리게 된다면... 위의 절.. 2021. 3. 21.
[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][Error] Mybatis Dynamic Table Select 이번에는 Mybatis로 구성한 application에서 mapper로 table명을 string으로 넘겨주고 동적테이블(Dynamic Table)로 조회(Select)하는 방법에 대해서 알아보겠습니다. 때로는 구성하는 application의 db구조가 동일한 구조의 데이터를 각 코드별로 구성을 하고, 해당 코드명으로 table명을 구성하는 경우가 생길 수 있습니다. 이럴 경우에는 mapper.java interface에서 parameter로 string의 table명을 전달하고, mapper.xml에서는 그 parameter를 sql의 from 이후에 배치하여 조회 query를 수행해야 합니다. 결국 parameter로 전송된 table명은 select query에 조합되어... SELECT * FRO.. 2021. 3. 12.