사용자가 초래할 수있는 피해가 내 코드와 관련이없는 경우 사용자의 의도적 인 잘못에 대해 보호 기능을 추가하면 과도하게 엔지니어링됩니까?
명확히하기 위해 다음과 같은 간단한 JSON RESTful 서비스를 공개하고 있습니다.
GET /items - to retrieve list of user's items
PUT /items/id - to modify an item
POST /items - to add a new item
이 서비스 자체는 브라우저를 통해 사용되는 것이 아니라 전화 응용 프로그램, 데스크톱 응용 프로그램 등과 같이 사용자가 제어하는 타사 응용 프로그램에서만 사용할 수 있습니다. 또한 서비스 자체는 상태 비 저장 (즉, 세션 비 저장)이어야합니다.
인증은 SSL을 통한 기본 인증으로 수행됩니다.
다음과 같은 가능한 "유해한"행동에 대해 이야기하고 있습니다.
사용자는 브라우저에 GET URL을 입력합니다 (이유는 아니지만 ...). 브라우저는 기본 인증을 요청하고 처리 한 후 현재 브라우징 세션에 대한 인증을 저장합니다. 브라우저를 닫지 않고 사용자는 서비스에 POST를 만드는 악의적 인 CSRF / XSRF 자바 스크립트 가있는 악의적 인 웹 사이트를 방문 합니다.
위의 시나리오는 거의 불가능하며 비즈니스 관점에서 너무 걱정해서는 안된다는 것을 알고 있습니다. 그러나 상황을 개선하기 위해 JSON POST 데이터에 사용자 이름 / 비밀번호가 필요한 경우 도움이 될 것이라고 생각하십니까?
아니면 기본 인증을 모두 삭제하고 GET을 제거하고 승인 정보가 포함 된 POST / PUT 만 사용해야합니까? 검색된 정보를 통해 GET도 민감 할 수 있습니다.
다른 한편으로, 사용자 정의 헤더를 사용하는 것이 순수한 REST 구현으로 간주됩니까? 기본 인증을 삭제하고 맞춤 헤더를 사용할 수 있습니다. 이러한 방식으로 브라우저의 CSRF 공격을 피할 수 있으며 서비스를 사용하는 응용 프로그램은 사용자 이름 / 암호를 사용자 지정 헤더로 설정합니다. 이 접근 방식의 단점은 이제 브라우저에서 서비스를 사용할 수 없다는 것입니다.