Bug 487

Summary: 未过滤注册用户的用户名导致Flask框架URL跳转存在问题
Product: EnglishPal Reporter: 吴宇涵 <woodwhale>
Component: Bug报告Assignee: Hui Lan <lanhui>
Status: RESOLVED FIXED    
Severity: critical    
Priority: High    
Version: 0.1   
Hardware: PC   
OS: Windows   
Deadline: 2022-12-31   
Attachments: 使用./reset命名,注册成功后会调转到/reset页面

Description 吴宇涵 2022-09-29 18:59:16 CST
Created attachment 248 [details]
使用./reset命名,注册成功后会调转到/reset页面

阅读程序源码发现,在 account_service.py 文件的第22行进行了check_username_availability(username) 函数的调用。

但是该函数仅仅去数据库中查询是否存在用户名相同的用户,没有进行任何非法字符的检测

针对非法字符,一共有三种情况存在问题

1. 使用 '#'、 '/'、'\'、' ' 等非法字符会导致URL被用户名污染,导致接口失效

2. 使用 'signup', 'login', 'logout', 'reset', 'mark' 等Flask已经申明的route路径会导致点击 '开始使用' 后直接跳转到对应的route路径

3. 使用以 'xxx/zzz' 方式命名用户名可用进行任意route地址跳转, 例如 'test/test` 就回去访问/test/test,如果该路径存在,则会执行(本质上就是结合了第1种情况和第2种情况)

附件给出了情况2的例子

-吴宇涵