[INSOMENIA] TIL 07

송나은·2021년 4월 27일
0

[INSOMENIA]

목록 보기
12/18

특정 key값으로 검색한 API를 불러오기

Enum

상품의 상태를 표현하는 방법!
상품 준비중(pending)/재고있음(active)/재고없음(disabled)

정수값으로 데이터가 입력된다.

  • Class method
    특정 클래스에서 직접적으로 실행할 수 있다.
    self를 앞에 붙여 사용한다.
  • Instance method
    객체 내부에서 실행할 수 있다.

Current user

  • users 안에 items 경로 추가 - 특정 판매자의 상품조회
  • 현재 사용자의 주문정보 조회 = current_api_user

SQL injection

SQL 문법을 이용해서 해킹하는 방식

/items?q=강아지&status=active 으로 파라미터를 넘겨줬을 때, 데이터를 조회하는 방법

  1. SQL injection 위험
def index
	items = Item.where("name like ?", "%#{params[:q]}%")
    # '강아지'를 포함한 이름이 조회된다. 
    # 물음표 안으로 %#{params[:q]}%이 들어가는 것! (SQL 문법)
    	items = Item.send(params[:status]) # 이 방법은 위험해여. status값을 악의적으로 disabled로 변경할 수 있다.

Ransack과 Ransaker를 사용하여 SQL injection을 방어할 수 있다.
-> ansack 공식문서

  1. Ransack 사용하기
  • Ransacker 기존 로직을 바꿔주는 방식
def index
    #items = Item.ransack(name_cont: params[:q], status_eq: params[:status], s: params[:s]).result
     items = Item.ransack(params[:q]).result
    render json: each_serialize(items)
end

#item.rb에 아래 내용 추가
	ransacker :status, formatter: proc {|status| statuses[status]} # integer로 검색한다.

프론트에서 params 전달 시

params ={
  q[category_id_eq]: 1,
  q[subcategory_id_eq]: 2,
}

// 쿼리 파라미터    
/items?category_id_eq=1&category_id_eq=2

    ```
profile
그때그때 공부한 내용과 생각을 기록하는 블로그입니다.

0개의 댓글