Back End
-
CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (1) - CSRF 공격이란 무엇인가Back End/보안 2023. 4. 23. 21:07
해당 포스팅 시리즈는 현재 목차 2번까지 작성되었습니다. 목차 1. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (1) - CSRF 공격이란 무엇인가 2. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (2) - 가상의 브라우저에 대한 CSRF 공격, 서버의 책임과 브라우저의 책임 3. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (3) - CSRF 공격을 직접 시도해보자 (Safari 브라우저) 4. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (4) - SOP, CORS, Browser, Third-Party Cookie, SameSite) 5. ..
-
커스텀 어노테이션을 직접만들어 개발비용을 줄여보자!Back End/유지보수 2023. 3. 26. 16:26
개인적인 주관이 섞여있는 포스팅으로 정답은 아닙니다. 범용적이고 관례적인 어노테이션은 동료개발자와 협업에 유리한 이점이 있다는 것 고려하시며 Trade-off 를 저울질 해보시길 바랍니다. 커스텀 어노테이션을 동료개발자와 충분한 협의 없이 사용 시 유지보수비용이 증가하게 됩니다. 필자가 불편했던 어노테이션들 대표적으로 @PreAuthorize, @Sql, @RequestMapping 등과 같이 String 값을 반복적으로 넣어주어야 하는 어노테이션들이 매우 불편하게 느껴졌다. 사용빈도는 꽤 큰 것에 비해, IDE 자동완성 기능 이후 따로 String 값을 지정해주어야 하는 두번의 작업으로 느껴졌다. @GetMapping("/product/vip") @PreAuthorize("hasRole('ROLE_VI..
-
[트러블슈팅] IntelliJ에서 Java 코드 인식 못할 때Back End/트러블슈팅 2023. 3. 22. 20:16
IntelliJ 에서 Java 코드를 인식 못할 때가 있다. 당황스럽기 그지 없는데 매번 이유도 달라 정리해둔다. 1. Gradle Import IntelliJ에서 Gradle 프로젝트 작동안될때 간혹 Gradle 프로젝트를 IntelliJ에서 불러올때 Gradle이 정상작동하지 않을때가 있습니다. 전혀 코드가 작동하지 않는데요. 이럴때 2가지 해결방법이 있습니다. 1. Import Gradle Project 먼저 IntelliJ 우측 jojoldu.tistory.com 2. IntelliJ 캐시 무효화 (Invalidate Cache) 3. gradle 이나 pom.xml 에 SpringBoot 버전과 호환되는 JDK 인지 확인하기
-
[트러블슈팅] Pageable 사용 시 Swagger 에서 쿼리파라미터 불일치 문제 원인 및 해결Back End/트러블슈팅 2023. 3. 22. 20:09
일반적인 Pageable 을 인자로 받는 컨트롤러 보통 Pageable 을 사용한 RestController 는 아래와 같은 모양을 갖는다. @GetMapping("/user/product") fun findUserProducts( @ApiIgnore session : HttpSession, @PageableDefault(size = 24) pageable: Pageable ): ResponseEntity { val userId = session.getUserId() val data = userProductService.findSliceByUserId(userId, pageable) return ResponseEntity.ok(CommonResponse(data = UserProductResponse.o..
-
[트러블슈팅] 이메일 유효성 검사 regex (feat. 특수문자 + 포함, 이메일 구성)Back End/트러블슈팅 2023. 3. 21. 18:58
이메일에 특수문자가 포함될 수 있어? 고객이 이메일로 abc+xyz@gmail.com 를 사용하고 싶은데 계정이 생성안된다고 CS 가 들어왔다. 이메일은 로컬파트@도메인파트 로 구성이 되어있다. 필자는 로컬파트에 + 가 포함된 이메일을 처음 목격한지라 허용을 해줘야하는지에 대해 판단하기 위해 Gmail 에서 + 가 포함된 이메일이 생성가능한지 먼저 검증을 해보았다. 아래의 구글블로그에서 + 를 이메일의 로컬파트에 사용가능하다고 명시하였다. 2 hidden ways to get more from your Gmail address Posted by Robby Stein, Associate Product Marketing Manager I recently discovered some little-known w..
-
[Spring Data JPA] JPA 에서 IN 절을 사용할 때 Prepared Statement 의 효율 높이기Back End/서버 비용 2023. 2. 13. 22:22
* 이 포스팅은 NHN 의 정지범 개발자님의 포스팅을 바탕으로 작성된 포스팅입니다. DBA와 개발자가 모두 행복해지는 Hibernate의 in_clause_parameter_padding 옵션 : NHN Cloud Meetup Java ORM 기술의 표준 명세인 JPA가 소개된 지 참 오래되었지만, 국내 현실상 대규모 시스템에서 적용되어 사용된 운영 경험이 충분히 쌓이지 않고 공유되지도 않는 것 같습니다. meetup.nhncloud.com 서문 public interface SampleRepository extends CrudRepository{ List findByIdIn(List ids); } 위와 같은 IN 절을 담은 Query Method 를 생성하면 JPA 입장에선 IN 절에 몇개의 파라미터가..
-
[보안] SQL Injection 대표예제와 원리Back End/보안 2023. 2. 13. 21:33
SQL Injection 의 대표예제 중 하나는 Application 에서 직접 짜여진 String 을 치환하여 DB 에 쿼리를 날리는 경우를 노리는 기법이다. 단순히 String 을 치환하여 DB 로 쿼리를 날리는 경우 대충 아래와 같은 Java 코드가 나온다. String sql = "select * from adminTable where login_id = '{loginId}' and password = '{password}'" sql = sql.replace("{loginId}", loginId); sql = sql.replace("{password}", password); sendQuery(sql); 그럼 loginId 과 password 에 1' or '1'='1 라는 값이 전달된다면 쿼리가 ..
-
[보안] Spring 에서 SQL Injection 방어 그리고 원리 (feat. Prepared Statement, JPA, MyBatis)Back End/보안 2023. 2. 13. 21:19
서문 회사 서비스에 AWS WAF 를 전역적으로 설정하면서 소량의 보안지식을 쌓을 수 있었다. 그러다 문득 Spring Application 은 SQL Injection 을 제대로 방어하고 있을까? 라는 궁금증이 생겨났다. Spring 에서 XSS 필터는 따로 적용하는 것을 보았으나 SQLI 필터를 적용한 케이스를 보지 못하여 더욱 궁금하였다. 서칭 결과, Prepared Statement 를 사용하면 SQLI 를 막을 수 있다고 한다. JDBC 에서 Prepared Statement 를 직접 사용해본 적이 있어 JDBC 스펙인 줄 알고, 구현을 해봤자 String 을 치환할 뿐 아닌가? 라는 생각에 도무지 어떻게 SQL Injection 을 막는다는 것인지 이해가 되지 않았다. Prepared Stat..