Slide 1

Slide 1 text

©2018 Wantedly, Inc. BOT vs reCAPTCHA 05.July.2018 - Ұᑍ୺੅ and Human vs reCAPTCHA

Slide 2

Slide 2 text

©2018 Wantedly, Inc. ࣗݾ঺հ Ұᑍ୺੅!IB[VNJSS !SFSPTU 8FC"QQMJDBUJPO&OHJOFFS 3BJMT 3FBDU ʜ ۴࿏ߴઐஜ೾େֶ8BOUFEMZ

Slide 3

Slide 3 text

©2018 Wantedly, Inc. BOTͷରࡦͯ͠·͔͢ʁ

Slide 4

Slide 4 text

©2018 Wantedly, Inc. BOTʹΑΔ߈ܸ ໨త: ECαΠτͳͲ΁ͷSEO໨త ஫ҙ: emailೝূ΋௨ΔBOT͕͍Δ

Slide 5

Slide 5 text

©2018 Wantedly, Inc. BOTʹΑΔ߈ܸ ໨త: ECαΠτͳͲ΁ͷSEO໨త ஫ҙ: emailೝূ΋௨ΔBOT͕͍Δ https://en.wikipedia.org/wiki/CAPTCHA

Slide 6

Slide 6 text

©2018 Wantedly, Inc.

Slide 7

Slide 7 text

©2018 Wantedly, Inc. SF$"15$)"

Slide 8

Slide 8 text

©2018 Wantedly, Inc.

Slide 9

Slide 9 text

©2018 Wantedly, Inc. ϑϩϯτΤϯυ https://developers.google.com/recaptcha/docs/invisible#auto_render reCAPTCHA demo: Simple page function onSubmit(token) { document.getElementById("demo-form").submit(); } Submit

Slide 10

Slide 10 text

©2018 Wantedly, Inc. ϑϩϯτΤϯυ https://developers.google.com/recaptcha/docs/invisible#auto_render reCAPTCHA demo: Simple page function onSubmit(token) { document.getElementById("demo-form").submit(); } Submit

Slide 11

Slide 11 text

©2018 Wantedly, Inc. JSͰόϦσʔγϣϯ͍ͨ͠ͱ͖͸ʁ

Slide 12

Slide 12 text

©2018 Wantedly, Inc. ϑϩϯτΤϯυ ࢀߟ: https://developers.google.com/recaptcha/docs/invisible#programmatic_execute reCAPTCHA demo: Simple page function onSubmit(token) { document.getElementById("demo-form").submit(); } function onClick() { // όϦσʔγϣϯΛߦ͏ grecaptcha.execute(); }

Slide 13

Slide 13 text

©2018 Wantedly, Inc. ϑϩϯτΤϯυ ࢀߟ: https://developers.google.com/recaptcha/docs/invisible#programmatic_execute reCAPTCHA demo: Simple page function onSubmit(token) { document.getElementById("demo-form").submit(); } function onClick() { // όϦσʔγϣϯΛߦ͏ grecaptcha.execute(); }

Slide 14

Slide 14 text

©2018 Wantedly, Inc. αʔόαΠυ ࢀߟ: https://developers.google.com/recaptcha/docs/verify conn = Faraday.new(:url => 'https://www.google.com/') res = conn.post '/recaptcha/api/siteverify', { :secret => ‘RECAPTCHA_SECRET_KEY’, :response => ‘RECAPTCHA_TOKEN’ } is_bot = JSON.parse(res.body)["success"]

Slide 15

Slide 15 text

©2018 Wantedly, Inc. αʔόαΠυ https://github.com/ambethia/recaptcha/

Slide 16

Slide 16 text

©2018 Wantedly, Inc. αΫοͱಋೖͰ͖Δʂʁ

Slide 17

Slide 17 text

©2018 Wantedly, Inc. αΫοͱಋೖͰ͖Δʂʁ => ಋೖͨ͠

Slide 18

Slide 18 text

©2018 Wantedly, Inc. https://support.google.com/recaptcha/?hl=en#6081880

Slide 19

Slide 19 text

©2018 Wantedly, Inc. ਓؒ΋஄͔Εͯ͠·͏

Slide 20

Slide 20 text

©2018 Wantedly, Inc. wਓͰ΋#PUͱٙΘΕΔ͕࣌͋Δ w Ϣʔβʔʢਓʣ͕཭୤͢Δ w ஄͔Εͨͷ͕CPU͔ਓ͔ؒΘ͔Βͳ͍ w#PUͷ਺Λࣄલʹௐࠪ͢Δ͜ͱ͕ࠔ೉ ͦͷޙɾɾɾ

Slide 21

Slide 21 text

©2018 Wantedly, Inc. wਓͰ΋#PUͱٙΘΕΔ͕࣌͋Δ w Ϣʔβʔʢਓʣ͕཭୤͢Δ w ஄͔Εͨͷ͕CPU͔ਓ͔ؒΘ͔Βͳ͍ w#PUͷ਺Λࣄલʹௐࠪ͢Δ͜ͱ͕ࠔ೉ ͦͷޙɾɾɾ SF$"15$)"WͰશͯղܾʂʁ

Slide 22

Slide 22 text

©2018 Wantedly, Inc. SF$"15$)"W https://github.com/rerost/recaptcha_v3_demo

Slide 23

Slide 23 text

©2018 Wantedly, Inc. SF$"15$)"W %&.0

Slide 24

Slide 24 text

©2018 Wantedly, Inc. SF$"15$)"W // ਓؒ {"success"=>true, "challenge_ts"=>"2018-07-05T06:35:35Z", "hostname"=>"localhost", "score"=>0.9, “action"=>"demo"} // BOT {"success"=>true, "challenge_ts"=>"2018-07-05T06:36:36Z", "hostname"=>"localhost", "score"=>0.1, "action"=>"demo"}

Slide 25

Slide 25 text

©2018 Wantedly, Inc. SF$"15$)"W // ਓؒ {"success"=>true, "challenge_ts"=>"2018-07-05T06:35:35Z", "hostname"=>"localhost", "score"=>0.9, “action"=>"demo"} // BOT {"success"=>true, "challenge_ts"=>"2018-07-05T06:36:36Z", "hostname"=>"localhost", "score"=>0.1, "action"=>"demo"}

Slide 26

Slide 26 text

©2018 Wantedly, Inc. ·ͱΊ wSF$"15$)"ͷํ͕Ϣʔβʔͷख͕ؒݮΔ wW͸#PU͕஄͚Δ͕ίϯόʔδϣϯ͕Լ͕Γ͔Ͷͳ͍ w ਓखͰ཭୤͕#05͔ਓ͔ؒͲ͏͔֬ೝ͠΍͍͢෦෼ʹಋೖͯ͠νΣοΫͨ͠ w ݪҼ͸ը૾λΠϧ͕ग़Δ͜ͱʹΑΔϒϩοΫ wW͸#FUB൛͕ͩίϯόʔδϣϯ͸Լ͕Βͳ͍