2012-01-25 2 views
14

Github offers a way 웹 훅을 사용하여 프로젝트가 업데이트 된시기를 URL에 알릴 수 있습니다.후 수신 후크 요청을 확인하는 방법은 실제로 github에서 왔습니까?

내 서버의 수신 후크로 보낸 게시물이 실제로 github에서 온 것인지 확인하려면 어떻게해야합니까?

보낸 사람의 IP 주소를 확인해야합니까? 아니면 어딘가에서 인증 확인을 보낼 수 있습니까? 나는 누군가가 github에서 나오는 것처럼 위장한 요청을 속이려고 시도하지 않도록하고 싶다.

하나의 옵션은 PubSubHubbub을 통해 후크를 설정하고 hub.secret 옵션을 사용하여 게시 본문의 SHA1 HMAC 서명을 만드는 것입니다. 그러나 그렇게하면 내 서버가 사용자가 원하는 시점에 수신 후 콜백을 설정할 때까지 기다리지 않고 요청을 설정해야합니다. 차라리 사용자에게 게시 URL에 붙여 넣은 URL을 붙여 넣으라고 요청할 것입니다.

답변

7

당신은 Github에서의 포스트 요청 IP 확인하기 위해 시도 할 수 있습니다 : 207.97.227.253, 50.57.128.197, 108.171.174.178 또한

+1

너무 간단하지 않았습니다. 데이터는 매우 중요하지 않으며, 단지 스팸 메일 제출을 중단하고 싶습니다. – Xeoncross

+2

Github에 따르면 실제 주소는 207.97.227.253, 50.57.128.197, 108.171.174.178입니다. – Joshua

+0

그 정보를 주셔서 감사합니다 Joshua – Roch

5

@ mnml의 대답을, 두 번째 단계는 바로 API and verify를 호출 할 수 주어진 정보가 프로젝트에 대해 마지막으로 알려진 커밋과 일치한다는 것입니다. OpenID가 전달 된 데이터가 유효한지 확인하기 위해 사용하는 것과 동일한 프로세스입니다.

그래서 먼저 IP를 검사하여 벙어리 답장 공격을 물리 칠 수 있습니다. 다음으로 나는받은 정보가 정확한지 github에게 물어볼 수 있습니다.

GET /repos/:user/:repo/commits/:sha 
+0

그래도 json 데이터를 사용하여 capistrano를 실행하고 커밋 분기에 따라 배포하십시오. – Roch

+4

**이 작업은 안전하지 않습니다 ** - 모든 사람이 끌어 오기 요청을 만들어 레포에 커밋을 추가 할 수 있습니다. 여기를 참조하십시오 : https://api.github.com/repos/github/gitignore/git/commits/85be394529d93cb7f29cd758599e7d103dc002f8. 이 (병합되지 않은) pull 요청의 일부 : https://github.com/github/gitignore/pull/542. – Chronial

1

추측하기 어려운 URL에서 웹 훅을 찾을 수 있습니다. 다음과 같이 말하면됩니다.

https://my-host.com/webhooks/E36006BE2C4BABDEEF307C77E34F415B/my-hook 

(128 비트의 임의 데이터 - 이는 편안하다고 느끼는 크기로 증가합니다.) github이이 URL을 안전하게 유지할 수 있다고 가정하면이 URL을 사용하는 클라이언트를 신뢰할 수 있습니다.

URL을 해킹해야하는 경우 새 임의 URL을 생성하고 웹 서버를 업데이트하는 것만 큼 간단합니다.

그냥 당신이 엔트로피의 좋은 소스를 사용하고 있는지 확인 ...

+0

네, 그렇다면 많은 웹 훅이있는 경우 URL이 손상된 경우 새 URL로 업데이트해야합니다. –

+2

일단 인터넷을 통해 URL이 사용 및 전송되면 일반 텍스트가 일반 텍스트가 아닌가? –

+3

HTTPS를 통해 전송되면 요청 경로가 암호화됩니다. –

7

GitHub's docs on the subject에서보세요 : 그들은 HTTPS 및 기본 인증을 사용하는 것이 좋습니다.

는 특히이 형식으로 페이로드 URL을 설정 : 당신은 사용자의 번호가있는 경우

https://yourUser:[email protected]/path

, 각 다른 사용자 이름 & 비밀번호를 줄 것입니다. 암호를 비공개로 유지한다고 가정하면 인증 요청이 실제로 GitHub 및 해당 계정에서 온 것임을 신뢰할 수 있습니다.

다음을 참조하십시오. https://github.com/blog/237-basic-auth-post-receives

관련 문제