| 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页面 | ||
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的例子 -吴宇涵