Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Twilio と Web アプリ
連携におけるセキュリティ

Ca17a082a30f4cbfed1d0a6dacbe3af2?s=47 shin1x1
March 09, 2016

Twilio と Web アプリ
連携におけるセキュリティ

2016/02/27 TwilioJP-UG大阪&AWScean合同勉強会

Ca17a082a30f4cbfed1d0a6dacbe3af2?s=128

shin1x1

March 09, 2016
Tweet

Transcript

  1. ɹ@shin1x1 2016/02/27 TwilioJP-UG大阪&AWScean合同勉強会 5XJMJPͱ8FCΞϓϦ
 ࿈ܞʹ͓͚ΔηΩϡϦςΟ

  2. https://github.com/shin1x1/twilio-api-security-demo

  3. 5XJMJPͱ8FCΞϓϦͷ࿈ܞ

  4. αϯϓϧΞϓϦέʔγϣϯ D .BTBTIJ4IJOCBSB!TIJOY wձһ޲͚ϙΠϯτ؅ཧγεςϜ wి࿩Λ͔͚ΔͱݱࡏͷϙΠϯτ͕ฉ͚Δ wి࿩൪߸Ͱೝূ

  5. D .BTBTIJ4IJOCBSB!TIJOY ి࿩Λ͔͚Δ 図 図 - twilio 図 図 -

    twilio Twilio Webαʔό ձһ YYYYYYYY
  6. D .BTBTIJ4IJOCBSB!TIJOY ి࿩൪߸͕ૹΒΕΔ 図 図 - twilio 図 図 -

    twilio )551ϦΫΤετ
 'SPNYYYYYYYY ʢൃ৴ݩి࿩൪߸ʣ
  7. D .BTBTIJ4IJOCBSB!TIJOY ձһೝূ 図 図 - twilio 図 図 -

    twilio YYYYYYͰ%#Λࢀরͯ͠ ձһΛಛఆ͢Δ
  8. D .BTBTIJ4IJOCBSB!TIJOY ৘ใΛ9.-Ͱฦ͢ 図 図 - twilio 図 図 -

    twilio 5XJ.-ʢ9.-ʣΛฦ͢
  9. D .BTBTIJ4IJOCBSB!TIJOY ৘ใΛ5XJ.-Ͱฦ͢ 図 図 - twilio 図 図 -

    twilio 5XJ.-ʢ9.-ʣΛฦ͢  YNMWFSTJPOFODPEJOH65'  3FTQPOTF 4BZWPJDFXPNBOMBOHVBHFKB+1
 ླ໦͞ΜͷϙΠϯτ͸ϙΠϯτͰ͢ɻ 4BZ 3FTQPOTF
  10. D .BTBTIJ4IJOCBSB!TIJOY Ի੠Λྲྀ͢ 図 図 - twilio 図 図 -

    twilio Ի੠࠶ੜ
  11. D .BTBTIJ4IJOCBSB!TIJOY σϞ

  12. D .BTBTIJ4IJOCBSB!TIJOY ى͜Γ͏Δ໰୊

  13. D .BTBTIJ4IJOCBSB!TIJOY )551ͷੈք 図 図 - twilio 図 図 -

    twilio Twilio Webαʔό ձһ
  14. D .BTBTIJ4IJOCBSB!TIJOY ِ૷ϦΫΤετ 図 図 - twilio 図 図 -

    twilio ి࿩൪߸Λ 1045
  15. D .BTBTIJ4IJOCBSB!TIJOY ِ૷ϦΫΤετ 図 図 - twilio 図 図 -

    twilio 5XJ.-Λ औಘ
  16. D .BTBTIJ4IJOCBSB!TIJOY ِ૷ϦΫΤετ 図 図 - twilio 図 図 -

    twilio Twilio Webαʔό ձһ DVSME'SPN#
 IUUQTFYBNQMFDPNBQJDBMMJOH  YNMWFSTJPOFODPEJOH65'  3FTQPOTF 4BZWPJDFXPNBOMBOHVBHFKB+1
 ాத͞ΜͷϙΠϯτ͸ϙΠϯτͰ͢ɻ 4BZ 3FTQPOTF
  17. D .BTBTIJ4IJOCBSB!TIJOY 5XJMJPΛِͬͨϦΫΤετ wِ૷ͨ͠ϦΫΤετΛ8FCΞϓϦʹૹ৴ w৘ใऔಘɺૢ࡞ͳͲͷෆਖ਼ར༻ͷՄೳੑ

  18. D .BTBTIJ4IJOCBSB!TIJOY ରࡦ

  19. ِ૷ϦΫΤετରࡦ D .BTBTIJ4IJOCBSB!TIJOY  ௨৴ܦ࿏ͷ҉߸Խ  ௨৴ݩΛ੍ݶ  ϦΫΤετΛݕূ

  20. D .BTBTIJ4IJOCBSB!TIJOY ௨৴ܦ࿏ͷ҉߸Խ w)5514Λར༻͢Δ wࣗݾॺ໊ͷূ໌ॻ͸/( w5-4Λར༻ʢ44-W͸ɺഇࢭ༧ఆʣ

  21. D .BTBTIJ4IJOCBSB!TIJOY 8FCΞϓϦέʔγϣϯͷΤϯυϙΠϯτ IUUQTʹ͢Δ

  22. D .BTBTIJ4IJOCBSB!TIJOY ௨৴ݩΛ੍ݶ w)551#BTJDೝূ%JHFTUೝূ wϢʔβɺύεϫʔυΛ63-ʹؚΊΔ wIUUQTVTFSQBTT!FYBNQMFDPN

  23. D .BTBTIJ4IJOCBSB!TIJOY *1ΞυϨεʹΑΔ੍ݶ͸ʁ https://www.twilio.com/help/faq/twilio-basics/which-ip-addresses-will-twilios-requests-come- from w5XJMJPͷૹ৴ݩ*1ΞυϨε͸ඇެ։ w୅ΘΓʹϦΫΤετͷݕূΛߦ͏ wͲ͏ͯ͠΋ඞཁͳΒ૬ஊ

  24. D .BTBTIJ4IJOCBSB!TIJOY ϦΫΤετͷݕূ ɾ5XJMJP͔ΒͷϦΫΤετͰ͋Δ͜ͱΛ֬ೝ wଥ౰Ͱ͋Ε͹ॲཧΛ࣮ߦ wͦ͏Ͱͳ͚Ε͹ॲཧΛதஅʢΤϥʔʣ

  25. D .BTBTIJ4IJOCBSB!TIJOY )."$4)"ॺ໊ʹΑΔݕূ ɾ95XJMJP4JHOBUVSFϔομ wॴఆͷΞϧΰϦζϜͰॺ໊Λࢉग़ w্هɺ̎ͭΛൺֱͯ͠߹க͢Ε͹PL

  26. 95XJMJP4JHOBUVSFϔομ 95XJMJP4JHOBUVSF TOEGBQB2 N11;6MO-L)X

  27. ॺ໊ࢉग़ ɾ63-IUUQTFYBNQMFDPNDBMMJOH ɾ1045ύϥϝʔλʢΩʔͰιʔτʣ
 ,FZWBMVF ,FZWBMVF 'SPN  IUUQTFYBNQMFDPNDBMMJOH
 'SPN ,FZWBMVF,FZWBMVF

  28. ॺ໊ࢉग़ ɾ"VUI5PLFOΛΩʔʹͯ͠ɺ)."$4)"ॺ໊ ɾCBTFͰΤϯίʔυ TOEGBQB2 N11;6MO-L)X IUUQTFYBNQMFDPNDBMMJOH
 ,FZWBMVF,FZWBMVF'SPN 

  29. ॺ໊͕Ұக͢Δ͔ ੜ੒ͨ͠ॺ໊ TOEGBQB2 N11;6MO-L)X 95XJMJP4JHOBUVSF TOEGBQB2 N11;6MO-L)X ߹க͢ΔͷͰɺ5XJMJP͔ΒͷϦΫΤετͱΈͳ͢

  30. UXJMJPTELʹΑΔݕূ $validator = new Services_Twilio_RequestValidator($authToken);
 
 // ϔομ͔Βॺ໊औಘ $signature =

    $request->header('X-Twilio-Signature');
 
 // URL औಘ Request::setTrustedProxies([$request->getClientIp()]);
 $url = $request->getUri();
 
 // POST ύϥϝʔλऔಘ $postParameters = $request->input();
 
 // ॺ໊ݕূ if (!$validator->validate($signature, $url, $postParameters)) {
 // OK
 } else {
 // NG
 }
  31. ·ͱΊ D .BTBTIJ4IJOCBSB!TIJOY w5XJMJPͱ8FCΞϓϦέʔγϣϯ͸
 )551 4 Ͱ࿈ܞ wِ૷ϦΫΤετ͕ૹ৴͞ΕΔ͜ͱΛҙࣝ w5XJMJPެࣜυΩϡϝϯτΛࢀߟʹ https://jp.twilio.com/docs/api/security