미친해커

[Web] Python Flask Google reCAPTCHA v2 적용하기 본문

Web

[Web] Python Flask Google reCAPTCHA v2 적용하기

미친해커 2022. 1. 6. 02:39
반응형

이번에 내가 운영하고 있는 웹사이트에 누가 10만번 리퀘스트를 날리는 일이 발생했다. 물론 디버깅 모드와 캡챠를 적용하지 않은건 내 잘못이다. 하지만 일부러 보안 설정을 해두지 않았으며 또 그렇다고 하더라도 허락없이 10만번이나 리퀘스트를 날리는건 법에 어긋난다. 그래서 이번 기회에 구글에 reCAPTCHA 우리가 흔히 알고 있는 '로봇이 아닙니다.'를 웹 사이트에 적용해보려고 한다. 참고로 나는 Python Flask를 사용하고 있다. 이 글을 쓰는 지금 친구의 연애상담을 하고 있다.

Google reCAPTCHA

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

먼저 위 링크에 들어가 웹 사이트를 등록해야한다. 사이트에 들어가면 다음과 같이 선택해준다,

필자는 localhost에서 테스트할 생각이기 때문에 도메인에 127.0.0.1을 입력했다. 만약 본인 사이트에 적용할 생각이라면 도메인을 적어주기 바란다. 이후에 제출을 누르면 다음과 같은 화면을 볼수 있다.

사이트 키 : 웹 사이트에서 토큰을 발급받기 위해 사용하는 키
비밀 키 : 웹 서버가 토큰이 유효한지 확인하기 위해 사용하는 키

이렇게 정상적으로 키가 발급되었다면 이제 Python 라이브러리를 다운받도록 하자

$ pip install flask
$ pip install flask_recaptcha
# 서버 코드
# file name : run.py
from flask import Flask, request, render_template
from flask_recaptcha import ReCaptcha

app = Flask(__name__)

app.config['RECAPTCHA_SITE_KEY'] = '사이트 키'
app.config['RECAPTCHA_SECRET_KEY'] = '비밀 키'

recaptcha = ReCaptcha(app)

@app.route('/', methods=['GET', 'POST'])
def default():
    message = ''
    if request.method == 'POST':
        if recaptcha.verify():
            message = 'success'
        else:
            message = 'failed'
    return render_template('v2.html', message=message)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True)
<!-- file name : v2.html -->
<!DOCTYPE html>
<html>
    <head>
        <title>Flask ReCaptcha Tutorial</title>
    </head>
    <body>
        <form method="POST"> <!-- 플라스크 서버로 POST 리퀘스트 전송 -->
            {{ recaptcha }} <!-- main.py 파일의 recaptcha 변수 -->
            <input type="submit" value="Submit">
        </form>
        <p>{{ message }}</p> <!-- reCAPTCHA의 성공과 실패 여부를 확인 -->
    </body>
</html>

아래 압축파일에 미리 환경을 셋팅해뒀다. 잘 모르겠다면 다운받아서 run.py 만 실행하면 된다.

reCAPTCHA.zip
0.00MB

이후 웹 사이트를 가동시켜 접속해보면 정상적으로 reCAPTCHA가 적용되어 있는 모습을 볼 수 있다,

반응형

'Web' 카테고리의 다른 글

[Web] Python Flask Google reCAPTCHA v3 적용하기  (0) 2022.01.15
Comments