6

악의적 인 액세스로부터 작업 대기열 URL을 보호하려고합니다.GAE 작업 대기열 URL을 올바르게 보안 설정 (app.yaml을 사용하지 않음)

if not users.is_current_user_admin(): 
    return HttpResponse(status=403) 

하지만 내 작업 대기열 (403) 오류를 받고 : 뷰에서

은 작업 대기열 내가있어 요청하는! 나는 this GAE documentation에서 작업 대기열 사용자가 관리자가 될 수 있다고 생각했습니다. 뭐라 구요?

참고 : 나는 DjangoNonRel을 사용하고 그래서 관리자 내 app.yaml 만 URL 액세스를 지정할 수 없습니다, 내가보기에 프로그래밍을해야한다.

답변

10

작업은 login: admin 제한을 우회 할 수 있지만 기술적으로 현재 사용자가 없으므로 users.is_current_user_admin()은 여전히 ​​false를 반환합니다.

Django-nonrel을 사용하면 app.yaml을 사용하여 작업을 보호해야합니다. 그냥 위의 보호 처리기를 추가 장고 캐치 모든 :

handlers:  

- url: /tasks/.+ 
    script: main.py 
    login: admin 

- url: .* 
    script: main.py 

/작업을 시작하는 모든 URL은/어떻게 어떤 경로를 변경하지 않고, 작업 큐에 접근 가능하고 관리자가 아닌 방문자에 액세스 할 수 없습니다.

+0

니스 저건 완벽 해. 감사. –

4

처리기는 X-AppEngine-QueueName과 같은 작업 대기열 HTTP 헤더를 찾을 수 있습니다. 공식 GAE docs에서

: 작업 큐 서비스에서

요청이 포함 된 다음 HTTP 헤더 :

X-AppEngine에-QUEUENAME
X-AppEngine에-TASKNAME
X-AppEngine에-TaskRetryCount
X-AppEngine-TaskExecutionCount
X-AppEngine-TaskETA

이러한 헤더는 Google App Engine에서 내부적으로 설정합니다. 요청 처리기가 이러한 헤더를 발견하면 요청이 작업 큐 요청이라는 것을 신뢰할 수 있습니다. 위의 헤더 중 어느 하나라도 앱에 대한 외부 사용자 요청에 이 있으면 제거됩니다.