Back End
-
[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..
-
[SQL 튜닝] Offset 쿼리가 느린 이유Back End/서버 비용 2022. 12. 19. 18:58
* 단순 지식 기록용 포스팅입니다. Off-set 쿼리 SELECT * FROM items WHERE 조건문 ORDER BY id DESC OFFSET 페이지번호 LIMIT 페이지사이즈 Off-set 쿼리가 느린 이유 select .. limit 10000,10020 과 같은 쿼리를 실행하면 10,000부터 20개만 읽는게 아니라, 10,020개를 읽은 후 앞의 10,000개를 버리는 식으로 DB가 동작하기 때문. 왜 그렇게 비효율적으로 동작하게 설계를 했을까 했는데, where 절이 삽입되면 인덱스로 끊어서 offset 위치를 파악할 수 없기 때문. 그래서 데이터수가 많아지고, Offset 의 위치가 커질수록 조회쿼리는 느려짐. 데이터 수가 많아지면 UI 를 바꿔서라도 No Offset 쿼리로 변경하는..
-
[XSS] HTML Escape Characters 리스트Back End/보안 2022. 12. 19. 18:38
Number Symbol Entity Name Code Description 9 Tab 	 Tab 10 New Line 
 New Line 32 Space Space 33 ! ! Exclamation mark 34 “ " " Quotation mark 35 # # Number sign 36 $ $ Dollar sign 37 % % Percent sign 38 & & & Ampersand 39 ‘ ' Apostrophe 40 ( ( Opening/Left Parenthesis 41 ) ) Closing/Right Parenthesis 42 * * Asterisk 43 + + Plus sign 44 , , Comma 45 – - Hyphen 46 . . Period 47 / / ..
-
[AWS] AWS WAF 오탐 예외처리 (AWS WAF False Positive Mitigation)Back End/보안 2022. 12. 17. 16:50
이전 포스팅 (AWS WAF 적용 시, 주의해야할 Default 설정들) 에 이어 이번엔 Count 로 설정한 규칙들에 대해 예외처리 하는 작업에 대한 포스팅을 하고자 합니다. 예외처리 작업에 앞서 Count 규칙에 대해 왜 예외처리가 필요한지 알아 보겠습니다. Count 로 변경한것도 예외처리인데 또 예외처리를 해야한다고? 왜? WAF 적용 초기에 필자는 이러한 생각을 했었다. 정상적인 트래픽인데도 Block 될 가능성이 있다면 열어주면 되겠군. Count 설정을 하여 최소한으로만 열어주자. 코딩을 하다보면 최소 권한 원칙이라는 단어를 한번쯤은 들어보았을 것이다. 예시로 Java 에서 final 키워드를 일단 다붙여 둔 뒤, 필요할 때만 final 키워드를 제거하는 방식의 코딩기법이 대표적이다. 최소 ..
-
[AWS] AWS WAF 적용 시, 주의해야 할 Default 설정들Back End/AWS 2022. 12. 17. 16:46
AWS Immersion Day 에서 소개 받은 AWS WAF v2 를 적용하면서 Default 설정 때문에 필자가 직면했던 문제점들에 대한 포스팅입니다. 이전 포스팅 [AWS] 서비스에 WAF 적용하기 WAF 란? WAF(Web application firewall) 는 OSI 4레벨 layer 가 아닌 7레벨 Layer 에 적용되는 방화벽이다. WAF 라는 서비스를 사용하여 OWASP’s Top 10 Web Application Vulnerabilities 에 대한 방어를 어느정도 쉽게 구축할 developer-ping9.tistory.com 서론 보통 회사의 직원으로써 자사상품은 항상 좋은점만 소개한다. AWS WAF 도 그랬다... (그래서 홀렸다...) AWS 에서 제공하는 Rule 들로 WAF..
-
[AWS] CloudWatch Log Insight value counts (CloudWatch Log Insight 에서 groupby count 사용하기)Back End/AWS 2022. 12. 17. 15:19
CloudWatch LogInsight 에서 GroupBy 문을 사용하여 Count 를 할 수 있다. 예제 데이터와 쿼리문은 아래와 같다. Example Data From CloudWatch { "timestamp": 1670839795503, "rule": [ { "ruleGroupId": "AWS#AWSManagedRulesCommonRuleSet", "terminatingRule": null, "nonTerminatingMatchingRules": [ { "ruleId": "SizeRestrictions_BODY", "action": "COUNT", "overriddenAction": "BLOCK", "ruleMatchDetails": [] } ], } ], "uri": "/my/api", "arg..