django에서 Rest framework 없이 rest api 를 만들고 있습니다 어느

 
공대영

django에서 Rest framework 없이 rest api 를 만들고 있습니다

어느정돈 틀이 잡혔는데 CSRF 토큰을 보내줘야 하는 문제가 생겼습니다

웹이라면 그냥 csrf_token 하면 되겠지만 이건 앱에서 요청하는거라 어떻게 안되네요

@csrf_exempt 이런게 있길래 써봤는데 제네릭에는 안되는것같네요

어떻게 앱에서 csrf 토큰을 가져오는 방법이 있을까요?

아님 그냥 Rest Framework 를 배워서 편하게 해야할까요?

  • Nam Changwoo

    csrf_exempt는 말 그대로 csrf 토큰을 검사 안 한다는 말일 텐데요? 파라미터 값 검사 및 데이터 반환 등 여러 상황이 놓여 있을 수 있으므로 제 의견에는 rest framework 위에서 개발하는 것이 더 나으리라 생각해요. 쓴 것과 안 쓴 것의 API 코드 퀄리티가 하늘과 땅 차이라… (적어도 저는)

    Tae-lim Oh

    제 기억이 맞다면 rest framework는 csrf를 안씁니다

    Dae-won Seo

    rest framework는 기본적으로 csrf_exempt가 true입니다. 그런데 보안 때문에 csrf를 적용해야 한다면 rotate_token 메소드를 실행하는 api-1를 구현하고 본 api를 호출하기 전에 api-1을 호출해서 토큰을 받아오면 됩니다 ㅎㅎ

    Dae-won Seo

    아 그리고 미들웨어를 이용해서 csrf_exempt을 false로 바꿔줘야 csrf 로직을 적용할 수 있습니다 ㅎㅎ

    Dae-won Seo

    보안토큰이 어떤걸 말하는 건가요? 제가 허접해서 ㅜㅜ 외부에 public하게 공개할 api라면 csrf를 적용 안하는게 맞겠죠 ㅎㅎ

    박정수

    CBV에서도 method_decorator를 사용하시면 function based view 에서 사용하던 decorator들을 사용할 수 있습니다.

    @method_decorator(csrf_excempt)
    이런 식으로요.

    단, 인자가 필요한 데코레이터는 method_decorator로 처리할 수 없습니다.

    Hyeonseung Lee

    csrf 토큰이란게 크로스사이트 어쩌구 공격을 막기 위해서 “폼을 보낼 때 얹어서 보냈다가 서브밋 받았을 때 내가 줬던 그 폼이 맞는지 확인하는데” 쓰입니다. rest api는 폼을 줄일이 없을 테니 csrf 토큰도 필요 없겠죠? 다른데 딱히 쓰실 계획 없으시면 세팅에서 아예 꺼버리시면 될 거 같은데요.
    클래스 베이스드 뷰에 데코레이터를 쓰실때는 클래스에 대해서 데코레이터를 쓸 수 있는 게 아니니 dispatch 함수에 대해서 데코레이터를 써야 합니다.
    https://docs.djangoproject.com/en/1.9/topics/class-based-views/intro/#decorating-the-class
    @csrf_exempt
    def dispatch(…):
    로 쓰시거나

    Hyeonseung Lee

    @method_decorator(login_required, name=’dispatch’)
    class ProtectedView(TemplateView):

    Hyeonseung Lee

    이렇게요

    박영록

    rest api를 웹의 spa에서도 사용하고, api 인증을 session cookie로 한다면 csrf 방어를 해야 하긴 합니다. 상황을 잘 살펴서 선택하셔야 할 듯.

    Dongmin Kim

    Json web token 으로 해도 csrf 문제는 있지않나요? Jwt 이든 세션쿠키든 모두 현 사용자가 로그인 한 상태이고 로그인 한 상태에서 해커가 이상한 요청을 유도하는거라면 꼭 뷰가 없더라도 서버의 해당 api 에 불량한 요청을 보내도록 할 수 있을거 같은데요. 그런데 범용적인 rest api 의 경우 csrf 토큰이 발행 가능한가요? 서버에서 서버측 데이타를 파싱해서 내려주는 뷰의 경우는 쉽지만 rest api 의 경우는 두번 요청하면 가능은 한가요? 윗분께서 언급하신 rotation token 이라 하심은 어떤 것인지.. 실제 사용자도 csrf 토큰을 요청하고 나서 본요청을 해당 토큰과 함께 보낼 수 있다면 해커 또한 그렇게 할 수 있는게 아닌지.. json web token 에도 csrf 토큰을 payload 에 실을 수 있다고 본듯 한데.. 원리 상 이해도 안 가구요. 그럼 jwt 를 항상 재발행 해야 하는데…

    공대영

    인증방식은 API 키 발급 방식으로 할 생각입니다. 뭐 예를들어 로그인이 들어온다면 아이디와 비밀번호를 받아서 인증한다음 랜덤솔트와 함께 bcrypt같은걸로 암호화한다음 클라이언트한테 던져주는거죠. 그럼 이제 클라이언트는 그걸 저장했다가 CRUD 를 요청할때 받아둔걸 던져주는 방식입니다

Advertisements