0

Elastic Beanstalk에서 실행되는 Django 앱을 보유하고 있으며 매일 밤 작업을 실행하려고합니다 (검색 엔진의 색인 다시 생성). AWS docs에 따르면 cron.yaml을 사용하면 적절한시기에 내 앱에 자동으로 POST 개의 요청을하고 내 앱이 적절하게 응답하도록 구성 할 수 있습니다.cron.yaml 요청에만 응답하도록 POST 끝점을 구성하십시오.

내 앱이 동일한 URL에 대한 임의 요청이 아닌 자동 생성 요청에만 응답하도록하려면 어떻게해야합니까? 특히 악의적 인 사용자가 게시하고 앱에서 일을 수행하는 것을 원하지 않습니다.

+0

분명히 요청이 POST라는 것을 확인할 수 있습니까? –

+0

@DanielRoseman 나는 또한 악의적 인 사용자의 게시를 막고 싶습니다. – Flash

답변

0
당신은 cron.yaml에서 확인 요청이오고 만들기 위해 몇 가지를 확인하실 수 있습니다

...

1) 요청 localhost에서 오는 것입니다.

2) User-Agentaws-sqsd을 포함합니다.

3) 요청은 작업자 인스턴스에서만 처리해야합니다.

나는 내 컨트롤러에 이러한 필터를 적용하기 위해 before_action 필터를 사용합니다. 코드는 다음과 같이 보입니다.

## 
# Protect against abuse - requests must have the correct "User-Agent" header, 
# come from localhost, and will only be handled by worker instances. 
before_action :correct_user_agent 
before_action :correct_source 
before_action :worker_instance 

...controller code here... 

private 

## 
# Confirms the correct User-Agent header was sent. 
def correct_user_agent 
    return if request.headers.env["HTTP_USER_AGENT"].include?("aws-sqsd") 
    head(:forbidden) 
end 

## 
# Confirms the request is coming from localhost. 
def correct_source 
    return if request.local? || Rails.env.development? || Rails.env.test? 
    head(:forbidden) 
end 

## 
# Don't allow requests to be processed in the production web environment, since 
# it has a worker instance associated with it. 
def worker_instance 
    return unless Rails.env.production? 
    head(:forbidden) 
end 
+0

감사합니다. 2는 쉽게 가짜 일 수있다; 1 아마도 TCP 핸드 셰이크로 인해 수 없지만 위험한 것 (장고가'X-FORWARDED-FOR' 등을 처리하는 방법을 모르는 경우); 3은 작업자 인스턴스에 트래픽을 보내지 않는 ELB에 의존합니다 (이에 의존 할 수 있습니까?) – Flash

+0

로드 밸런서를 올바르게 구성한 경우 웹 인스턴스에 대해서만 알고 있어야합니다. – Brian