2017-11-01 7 views
19

Firebase (이 경우 Firebase 클라우드 기능)를 사용하는 경우 모든 바이트의 대역폭에 대해 비용을 지불해야합니다.Firebase 클라우드 기능 : 연속 요청 처리 방법

그럼 어떻게 든 우리 끝점을 찾은 다음 의도적으로 (스크립트 또는 도구로) 계속 요청을 찾은 사람을 어떻게 처리 할 수 ​​있을지 궁금합니다.

인터넷에서 일부 검색을했지만 아무 것도 도움이되지 않습니다. this one을 제외하고는별로 유용하지 않습니다.

답변

7

요청 유형을 지정하지 않았으므로 firebase 클라우드 기능에서 http (s) -triggers를 사용한다고 가정합니다.

요청에 의해 소비되는 대역폭을 '줄이기'위해 여러 개의 리미터가 있습니다. 내가 요청

모두 당신이 필요 GET 경우의 유형을 제한 내 마음

1)에 오는 몇 가지를 작성하고 당신은 반환하여 시작할 수 있습니다 당신이 PUT 필요하지 않습니다 예를 들어 말할 것이다 클라우드 기능을 추가로 사용하기 전에 403

if (req.method === 'PUT') { res.status(403).send('Forbidden!'); } 

2)

Follow Google's example here 만 허용 인증 된 사용자가 HTTPS 엔드 포인트를 사용할 수있는 경우 인증합니다. 토큰 like this SOF answer ~ this question을 확인하면됩니다.

3) 원산지 당신은 클라우드 기능에 더 가기 전에 요청의 출처를 확인하는 시도 할 수 있습니다

확인합니다. 올바르게 호출 한 경우 클라우드 기능을 사용하면 HTTP 요청/응답 개체에 대한 모든 액세스 권한을 얻을 수 있으므로 적절한 CORS 헤더를 설정하고 비행 전 OPTIONS 요청에 응답 할 수 있습니다.

실험 아이디어 1

당신은 가설 load balancer/firewall 뒤에 기능을 넣어 릴레이 - 트리거를 할 수 있습니다. 클라우드 기능의 확장성에 대한 목적을 어느 정도 상쇄 할 수 있지만 확장 성보다는 DoS 형태가 더 큰 관심사라면 앱 엔진 릴레이 생성,로드 밸런서/방화벽 및 핸들링 해당 계층의 보안

실험 아이디어 2

당신은 사이에 cloudflare 같은 것을 넣어 문제에 DNS 레벨 공격 방지 솔루션을 사용하여 시도 할 수 있습니다. URL을 클라우드 기능에 매핑하려면 CNAME 및 Cloudflare Page Rules을 사용하십시오. 이것은 충격을 가설 적으로 흡수 할 수 있습니다.이처럼 :

*function1.mydomain.com/* ->https://us-central1-etc-etc-etc.cloudfunctions.net/function1/$2

은 이제

http://function1.mydomain.com/?something=awesome

에 가면 당신은 당신의 기능에 URL의 PARAMS을 전달할 수 있습니다. 내가 비슷한 것을 필요로했던 여름 동안 내가 읽은 전술 in this medium article.

마지막

또 다른 질문을 SOF에 질문을 더 연결 확인하고, 모든 사람들이 답을 찾을 수 here's 있도록하기위한 시도에서 나는 자연의 유사 발견했다. 다른 사람들도 그것을 찾을 수 있도록 여기에 연결하십시오.

+0

답변 해 주셔서 감사합니다. 나는 Cloudfare를 제외하고 모두 그것을했다, 그것을 감사하십시오. 따라서, 결국 우리는 각 안녕에 대한 비용 계산에주의를 기울여야합니다. 지금 보호를 요청하십시오. –

+0

@ LạngHoàng 기쁜 마음으로 도움이되었습니다. :) 나는 여전히 수학을 할 것이고, 그것이 어디로가는지도 볼 것입니다. 클라우드 플레어 (Cloudflare)의 가격 정책을 조사해 볼 가치가 있을지도 모릅니다. 아주 특정한 경우 클라우드 플레어는 더 싸게 끝날 수 있습니다. – johnozbay

2

https 끝점을 확인할 수있는이 문제에 대한 해결책이 있습니다.

HTTP 요청의 승인 헤더 또는 __session 쿠키에서 유효한 Firebase ID 토큰을 전달 토큰으로 전달한 사용자 만이 기능을 사용할 수 있습니다.

ID 토큰 확인은 ExpressJs 미들웨어 (Express 요청 객체에서 디코드 된 ID 토큰도 전달)로 수행됩니다.

this firebase의 샘플 코드를 확인하십시오.

+0

확인하기 쉽고 어떻게해야하는지 알았지 만 누구든지 사용할 수있는 공개 엔드 포인트를 제공해야하는 경우가 많습니다. 요점은 우리를 공격하고 싶어하는 사람을 다루는 방법입니다. –

관련 문제