정규식 주입 (Regular Expression Injection)
Regular Expression Injection
Last updated
Regular Expression Injection
Last updated
from flask import Flask, request
import re
app = Flask(__name__)
@app.get('/search')
def search():
pattern = request.args.get('p', '') # 사용자가 패턴 전체를 제어
text = request.args.get('t', '')
# 비안전: 주입된 패턴이 그대로 사용됨
return ('hit' if re.search(pattern, text) else 'no')from flask import Flask, request, abort
import re
app = Flask(__name__)
@app.get('/search')
def search():
term = request.args.get('p', '')
text = request.args.get('t', '')
# 길이 제한으로 비용 통제
if len(term) > 100:
abort(400, 'query too long')
# 안전: 메타문자 이스케이프로 리터럴 검색으로 변환
safe_pat = re.escape(term)
prog = re.compile(safe_pat) # 서버가 제어하는 안전한 플래그만 사용
return ('hit' if prog.search(text) else 'no')