TinyWebServer icon indicating copy to clipboard operation
TinyWebServer copied to clipboard

即使注册账号不成功也能访问

Open lizhinb opened this issue 2 years ago • 6 comments

http_conn.cpp 模块, http_conn::do_request()函数里,第436行 int res = mysql_query(mysql, sql_insert); 当 res返回非0 时,返回给浏览器页面为提示已被注册的“/registerError.html”。但是在此之前437行:users.insert(pair<string, string>(name, password)); 使得注册用户时只要满足433行 users.find(name) == users.end()的非是既有用户的条件,在 res 非0 mysql_query()执行sql_insert不成功后,依然将其加入既有用户user中,虽然没有写入mysql。所以在这种情况下,注册非既有账号显示未成功后,直接去登录界面,输入刚才注册失败的账号,也依然可以进入"welcome.html"页面。当然这不难解决,除了非确定错误,最好还是写对sql 语句。

lizhinb avatar Apr 16 '22 15:04 lizhinb

怎么解决呢?你发现没?在访问地址后面加上/6,不用登录就可以访问

不只是6,加上请求资源的任何一个action都可以获取对应的资源,我用GDB调试,发现读取到的请求是:GET /7 HTTP/1.1\r\nHost: localhost:9006\r\nUser-Agent: ......,说明直接获取了7对应的html资源,而不是默认的/。我认为需要判断用户的权限,具体怎么做我就不晓得了。

baichuan51141 avatar Jul 08 '22 03:07 baichuan51141

可以把users.insert(pair<string, string>(name, password)); 放入 if(!res) 这个语句内部,然后操作之前加锁,之后解锁

chenanga avatar Jul 22 '22 09:07 chenanga

可以把users.insert(pair<string, string>(name, password)); 放入 if(!res) 这个语句内部,然后操作之前加锁,之后解锁

改了貌似没有起到作用

起作用了,刚才跑成之前的代码了

不过,多试几次又可以进去了

这种情况是会发生的,一般跳转页面会带用户信息校验,但这个项目里没有。

qinguoyi avatar Sep 26 '22 10:09 qinguoyi