2. CGI 后端
触发留言后表单提交到 /cgi-bin/guestbook.py CGI[1] 脚本处理。
输入处理
def parse_form_data():
method = os.environ.get('REQUEST_METHOD', 'GET')
if method == 'GET':
qs = os.environ.get('QUERY_STRING', '')
form_data = parse_qs(qs)
else:
length = int(os.environ.get('CONTENT_LENGTH', 0))
body = sys.stdin.read(length)
form_data = parse_qs(body)
return {k: v[0] for k, v in form_data.items()}
CGI 的数据来源非常原始:GET 请求从 QUERY_STRING 环境变量读,POST 请求从标准输入读。脚本会解析
URL-encoded 表单数据,然后进行清理:
def sanitize(text):
text = text.replace('\n', ' ').replace('\r', ' ') # 移除换行
text = text.replace('|', ' ') # 移除分隔符
return html.escape(text) # 转义 HTML
移除 | 是因为它被用作数据文件的分隔符;移除换行防止数据格式被破坏;HTML 转义防止 XSS 攻击。
|