2014-10-08 2 views
0

저는 Laravel API/AngularJS Monster를 만드는 중입니다. 프론트 엔드, DB, API 등을 완전히 분리하려는 아이디어는 주로 앱 개발에 착수하여 모든 것을 분리하여 API가 모든 과감한 작업을 수행 할 수 있기를 원했기 때문입니다. 그래서 앞으로 OS X/iOS/Native 앱을 포함하여 유일한 인터페이스가 될 인터페이스를 만들 계획입니다. 나는 온라인으로 물건을 찾고 일부 설정 및 자습서를 다음과 내가 CSRF 구현하는 좋은 일이라고보고 있어요 있어요 그러나다중 앱 API를 구현하려는 경우 CSRF를 사용해야합니까?

는 ...

을 안전하고 옳은 일 것 같다 그러나입니다 API에 대한 필연적 인 권리?

API를 사용하면 어떤 보안 방법이 좋을까요?

지금 당장 구현할 수있는 유일한 사실은 세션 쿠키와 내 응용 프로그램에서 HTTPS를 사용하는 것입니다.

+0

저는 개인적으로 내 사이트 간 사이트 요청을 위조하지 않습니다 ... 일반적으로 자신을 공격하지 않는 것이 좋습니다. –

+0

누가 API를 호출하고 있습니까? 그들은 어떻게 인증합니까? 세션 쿠키를 사용합니까? – Thilo

+0

동일한 경로를 사용하는 여러 플랫폼에서 동일한 정보를 사용하여 인터페이스를 만들고 싶기 때문에이 경로를 생각하는 유일한 이유입니다. 이 문제에 대한 훨씬 더 나은 해결책이 있습니까? –

답변

1

API에 클라이언트 측 액세스가 있고 그렇다면 CSRF 보호가 필요합니다.

쿠키 (또는 다른 인증 메커니즘)가 프런트 엔드에서 사용되고 JavaScript에서 API로 전달 된 다음 작업이 시작되거나 콘텐츠가 반환 된 것으로 가정합니다. 당신이 CSRF 토큰의 일종을 보내야합니다 행동 (즉, non safe methods - RFC 7231를) 시작 항목에 대해

같은 X-Requested-With 또는 검사 등의 CSRF을 방지하기위한 다른 유효한 방법이 있지만, (예를 들어 Synchronizer Token Pattern를 권장 또는 Double Submit Cookies되는) Origin 헤더.

어떤 방법을 선택하든이 인증을 앱에 구현할 수도 있습니다. 사용자 정의 응용 프로그램에서 토큰 또는 쿠키 값을 검색하는 것은 간단하거나 추가 헤더를 전달하는 것도 쉽습니다. 웹 사이트에서이 CSRF 보호 작업을 수행하는 이유는 브라우저가 Same Origin Policy 때문에 토큰을 읽거나 헤더를 보낼 수있는 다른 도메인을 제한한다는 것입니다. API가 다른 도메인에있는 경우 이미이 단계를 지난 것처럼 들리지만 CORS을 사용하여 웹 사이트 도메인에서만 액세스를 허용 할 수 있습니다. API를 HTTPS로 보호하고 쿠키에 Secure flag을 설정하고 HSTS을 사용하여 API와 웹 사이트를 더욱 안전하게 보호해야한다고 생각해야합니다.

+0

이것은 내가 조사해 볼만한 많은 것들입니다. 감사합니다! "API가 클라이언트 측에 액세스되는 경우"는 정확히 무엇을 의미합니까? 말씨가 나를 혼란스럽게하지는 않지만, 프론트 엔드는 Angular와 완전히 자바 스크립트이며 단순한 csrf_token() 메소드를 수행 할 PHP가 없습니다. 동일한 세션의 토큰에 액세스 할 수있는 다른 방법이없는 것처럼 보입니다. –

+1

@ShawnStrickland : 다른 사람들이봤을 때 귀하의 질문을 찾았을 때 일반적으로 말하고있었습니다. 귀하의 답변이 '예'였습니다. – SilverlightFox