2013-02-27 1 views
0

슬림 Microframework와 함께 RESTful 웹 서비스를 작성하고 MySQL 데이터베이스 (select query)에서 데이터를 읽는 데 GET을 사용하고 데이터베이스에서 행을 삽입/업데이트/삭제하기 위해 POST/PUT/DELETE를 사용합니다.슬림 프레임 워크가있는 PHP RESTful 웹 서비스, 무국적자에 대한 인증이 필요합니까?

이제 모든 사람들이 데이터베이스에 데이터를 쓰거나 삭제할 수 있다면 큰 문제가되지 않겠습니까? 하지만 어떻게 이것을 막을 수 있을까요? REST의 보안 목표 명세서가 상태 이전의 약자라고 생각했기 때문에 (웹 서비스가 상태를 유지하지 못함) 로그인 상태와 모순되는 상태입니다. 그리고 만약 내가 데이터베이스에 쓸 수있는 클라이언트와 일부 로그인 데이터를 전달할 수 나쁜 사람이 logindata를 잡아와 가짜 요청을 예를 들어 모든 항목을 삭제할 수 없습니까?

정상적인 방법은 무엇일까? 내가 발견 한 Slim Framework 예제는 항상 경로 예제를 보여 주지만 보안 방법은 제시하지 않습니다.

슬림 프레임 워크에서 필요한 것을 구현할 수있는 기회가 있습니까? 가능한 한 쉬운 것이어야하며 요청은 인증 또는 이와 유사한 방식으로 신속하게 대응되어야합니다. 암호와 같은 민감한 데이터는 없습니다. cURL 명령 줄 도구를 사용하는 모든 사람이 모든 행이나 일을 삭제할 수있는 것은 아닙니다.

누군가가 내게 무엇을 설명하고/또는 몇 가지 예를들 수 있다면 좋을 것입니다. 또한 요청을 보낼 수있는 클라이언트에서 변경할 필요가있는 사항을 알아야합니다.

감사합니다.

답변

0

실제로 세션이나 쿠키가 없으므로 상태가 저장되지 않습니다. 일반적으로 INSERT/UPDATE/DELETE에 필요한 키를 발행합니다.

각 요청마다 키를 전달하고 만료시기를 결정해야합니다.

+0

나는이가 apiKey에를 사용하여 호출되어 있는지 알아 냈어. 그러나 Slim 프레임 워크의 기본 솔루션을 찾지 못했습니다. 대신 프레임 워크 제작자의 git repo를 찾았는데, 여기에는 예를 들어 HTTPbasicAuth라고하는 일부 Slim Extras가 있습니다. 찾을 수 있습니다 : https://github.com/codeguy/Slim-Extras/tree/master/Middleware 이제 내 질문은, 대신이 키를 사용할 수있는 경우 또는 데이터베이스에 삽입/업데이트 권한이 없습니다. 악의적 인 사람이 인증 데이터 (또는 키)와 가짜 요청을 여전히 스니핑하지 못했습니까? 감사. –

+0

http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ – Rawkode

+0

이 링크를 이용해 주셔서 감사합니다. 그러나 슬림 프레임 워크를 사용하는 것은 아닙니다. 위에서 물어 본 HTTPbasicAuth는 어떻습니까? Slim에서 실제로 뭔가를 찾고 있지만, 내가 찾은 것이 유용 할 지 확실하지 않습니다. 다시 Thx –

1

각 요청은 인증되고 인증되어야합니다.

사람들은 종종 'stateless'라는 단어로 묶입니다. 이것은 실제로 하나의 요청에서 다음 요청으로 RESTful 서비스가 사용자 상태에 대한 사전 지식이 없다는 것을 의미합니다.

그러나 서비스는 방금 요청한 인증 된 사용자를 인식 할 수있게 허용됩니다. 그렇지 않으면 액세스 허용 여부를 어떻게 결정합니까?

따라서 각 요청 중에 인증 된 사용자를 변수에 '저장할'수 있습니다. 그런 다음이 정보를 사용하여 요청을 승인하는 방법은 귀하에게 달려 있습니다.

나는 그것을 단순하게 유지하고 모든 사용자를 내 URI 체인의 리소스로 사용하고 싶습니다. 그들은 users/{username}/someresource과 같은 요청을합니다.

나는 SSL 기본 인증을 사용하여 인증하고 URI를 기반으로 인증합니다. 요청이 인증에 실패하면 401 인증되지 않은 요청입니다. URI {username}과 인증 된 {username}이 일치하지 않으면 요청은 금지 된 403입니다. 인증되고 권한이 부여되면 요청이 허용됩니다 (HTTP 동사에 따라 http 코드가 달라집니다)

이제 웹 서비스 클라이언트에 대해 설명 드리겠습니다. 이것은 물론 상태를 저장해야합니다. 그렇지 않으면 사용자가 요청할 때마다 로그인해야합니다.

세션에 사용자 이름과 암호 (물론 암호화 됨)를 저장하는 것 외에 일반 세션 관리 당 사용자 세션을 응용 프로그램에 저장하기 만하면됩니다. 이제는 요청이있을 때마다 웹 서비스 클라이언트가 사용자 이름과 암호를 검색하여 웹 서비스에 요청과 함께 보내야합니다.

0

정상적인 http 인증 세션만큼 안전합니다. 이들은 저장된 세션 상태에 대해 연결된 사용자를 인증하기 위해 쿠키 등을 사용합니다.

stateless 서비스는 별다른 차이가 없습니다. 토큰은 일반 http의 쿠키에 토큰이 저장되는 것처럼 서비스에 전달됩니다. 스니핑 (중간 공격의 IE 사람)에 대해 걱정한다면 SSL을 통해 링크를 보호해야합니다.

서비스에 의해 생성 된 인증 토큰은 암호화되어 각 요청에 대해 서버에서 확인되는 소금을 포함합니다. 당신은 또한 당신의 편집증에 맞게 세션 시간을 제한 할 수 있으며 소스 IP, 사용자 에이전트 등의 변경 사항을 확인하고 이러한 변경이있을 경우 사용자 토큰을 만료 할 수 있습니다.

0

나는 최근에 비슷한 문제가 발생했습니다. 여기 사람들이 추천 한대로 OAuth 인증을 사용하기로 결정했습니다. 등 내가 HybridAuth의 OAuth 및 페이스 북, 트위터, 구글, 링크드 인에 대한 솔루션의 상자 기호를 벗어난 PHP는 래퍼 사용하고