2012-08-30 2 views
1

질문 앞면 :allocate_ids를 남용 할 수 있습니까? ID가 다 떨어질 위험이 있습니까?

내가 알기로, allocate_ids는 새로운 엔티티 생성 또는 다른 allocate_ids 호출을 위해 데이터 저장소에서 사용하지 않는 ID 블록을 예약합니다. 그 맞습니까?

사용되지 않는 할당 ID는 재사용됩니까? 그렇다면 제한 시간은 어떻게됩니까?

사용하지 않은 할당 된 ID를 결코 다시 사용하지 않으면 ID가 부족해질 수 있습니까? 다른 유해한 영향이 있습니까 (즉, ID가 지나치게 커짐).

배경 :

나는 REST API를 통해 중복 된 개체를 만드는 것을 방지 할 수있는 시스템을 만들려고 해요. 초기 폼을 만들 때 allocate_ids를 호출하고이 ID를 폼에 포함합니다. 양식을 REST API에 제출하면 ID가 삽입 된 개체가 만들어집니다. 동일한 양식이 두 번 제출되면 중복 객체를 만들지 않는 것을 알게됩니다.

양식을 제출하지 않고 여러 번 볼 수 있습니다.이 경우 엔티티를 만들지 않는 곳에 많은 ID를 사용하는 위험이 있습니다. 이 계획에 문제가 있습니까?

답변

1

몇 가지 문제 :

  1. 가 클라이언트 측에 데이터 스토어 ID를 노출시키지 마십시오. @Shay가 지적한 것처럼 사용자가 직접 데이터를 조작 할 수 있기 때문에 보안 위험이 있습니다.

  2. 중복 양식 제출 문제는 기본적으로 응용 프로그램 워크 플로의 문제입니다. 이 문제를 해결하려면 클라이언트 측 솔루션 (javascript)을 선호하지만 서버 측 솔루션을 고집한다면 sessions을 사용하십시오. 가짜 ID를 만들어 세션에 저장하고 양식의 숨겨진 필드로 설정하십시오. 양식이 제출되면이 필드를 확인하십시오.

+0

이 내 질문에 대답하지만 allocate_ids()에서 반환 된 ID가 사용하지 않으면 영원히 손실됩니다 궁금해. – dragonx

+0

예, 그들은 영원히 잃어 버릴 수 있습니다. 그렇지 않으면이 함수는 의미가 없습니다. –

+0

무엇? 아니요, 데이터 저장소 ID를 사용자에게 표시하는 것은 보안 위험이 아니며 데이터를 조작 할 수 없습니다. 더 이상 확인하지 않고 ID를 설정하면 위험 할 수 있습니다. –

1

시스템을 쉽게 해킹 할 수 있습니다. 누군가가 ID 값을 수동으로 변경할 수 있으며 기존 엔티티를 무시합니다. 새 개체를 만들 때 데이터를 게시하고 AppEngine에서 생성하고 ID를 부여합니다.

allocate_id는 64 비트 공간에서 작동합니다 (최소). 따라서 10 초당 10 개의 ID를 생성하더라도 수천 년이 걸릴 수 있습니다.

+0

아니요, 양식 게시를 허용하면 두 번 게시 된 것과 동일한 ID를 가진 두 개의 엔티티가 생성됩니다.이 ID는 정확하게 방지하려고 시도합니다. – dragonx

+0

그런 다음 id를 사용하지 말고 사용자가 변경할 수있는 난수를 사용하여 다른 엔티티를 대체하십시오. –

관련 문제