weijiang1994 / Blogin

A blog system depend on flask.使用flask框架开发的个人博客系统.
https://2dogz.cn
GNU General Public License v3.0
509 stars 99 forks source link

用户验证改造 #24

Closed tianke0711 closed 2 years ago

tianke0711 commented 2 years ago

你好 我发现我的数据库被恶意攻击啦,很多注册用户都是垃圾。 image

我的第一步改造就是用户需要在邮箱点击后才能算正式注册。 这一步怎么修改啊。还有加入防止机器人恶意注册。 能否指点一下咋修改

weijiang1994 commented 2 years ago

可以看下我这个项目的注册方式,通过验证码认证 https://github.com/weijiang1994/university-bbs/blob/a1ab12fb2c0b729a8edc0c55bdd6fe96da7e122e/bbs/blueprint/frontend/auth.py#L56

tianke0711 commented 2 years ago

@weijiang1994 好的 谢谢 今天试试咋弄

tianke0711 commented 2 years ago

@weijiang1994 用户验证时候 需要邮箱设置smtp。我看gmail设置咋没有设置smtp自动生成的密钥啊https://wpjian.com/tips/2020111837297.html 我想用问一下gmail情况咋设置。

MAIL_SERVER='smtp.gmail.com' MAIL_USERNAME='xx' # 设置邮箱名 MAIL_PASSWORD= 'xx' 设置邮箱秘钥,不是登录密码而是申请SMTP时自动生成的秘钥

weijiang1994 commented 2 years ago

@weijiang1994 用户验证时候 需要邮箱设置smtp。我看gmail设置咋没有设置smtp自动生成的密钥啊https://wpjian.com/tips/2020111837297.html 我想用问一下gmail情况咋设置。

MAIL_SERVER='smtp.gmail.com' MAIL_USERNAME='xx' # 设置邮箱名 MAIL_PASSWORD= 'xx' 设置邮箱秘钥,不是登录密码而是申请SMTP时自动生成的秘钥

这种东西google一搜索就搜到了 https://support.google.com/mail/answer/7126229?visit_id=637869977468420907-1312395347&hl=zh-Hans&rd=1#zippy=%2C%E7%AC%AC-%E6%AD%A5%E5%9C%A8%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B8%AD%E6%9B%B4%E6%94%B9-smtp-%E5%92%8C%E5%85%B6%E4%BB%96%E8%AE%BE%E7%BD%AE

tianke0711 commented 2 years ago

@weijiang1994 用户验证时候 需要邮箱设置smtp。我看gmail设置咋没有设置smtp自动生成的密钥啊https://wpjian.com/tips/2020111837297.html 我想用问一下gmail情况咋设置。 MAIL_SERVER='smtp.gmail.com' MAIL_USERNAME='xx' # 设置邮箱名 MAIL_PASSWORD= 'xx' 设置邮箱秘钥,不是登录密码而是申请SMTP时自动生成的秘钥

这种东西google一搜索就搜到了 https://support.google.com/mail/answer/7126229?visit_id=637869977468420907-1312395347&hl=zh-Hans&rd=1#zippy=%2C%E7%AC%AC-%E6%AD%A5%E5%9C%A8%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B8%AD%E6%9B%B4%E6%94%B9-smtp-%E5%92%8C%E5%85%B6%E4%BB%96%E8%AE%BE%E7%BD%AE

那这个我知道,那密码不就是你自己的邮箱登录密码?并不是密钥。

weijiang1994 commented 2 years ago

@weijiang1994 用户验证时候 需要邮箱设置smtp。我看gmail设置咋没有设置smtp自动生成的密钥啊https://wpjian.com/tips/2020111837297.html 我想用问一下gmail情况咋设置。 MAIL_SERVER='smtp.gmail.com' MAIL_USERNAME='xx' # 设置邮箱名 MAIL_PASSWORD= 'xx' 设置邮箱秘钥,不是登录密码而是申请SMTP时自动生成的秘钥

这种东西google一搜索就搜到了 https://support.google.com/mail/answer/7126229?visit_id=637869977468420907-1312395347&hl=zh-Hans&rd=1#zippy=%2C%E7%AC%AC-%E6%AD%A5%E5%9C%A8%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B8%AD%E6%9B%B4%E6%94%B9-smtp-%E5%92%8C%E5%85%B6%E4%BB%96%E8%AE%BE%E7%BD%AE

那这个我知道,那密码不就是你自己的邮箱登录密码?并不是密钥。

image

tianke0711 commented 2 years ago

@weijiang1994 好的 谢谢

tianke0711 commented 2 years ago

@weijiang1994 我刚才在bbs代码里测试一下qq邮箱的, local环境里 为啥注册收不到验证码邮件啊

raise SMTPSenderRefused(code, resp, from_addr) smtplib.SMTPSenderRefused: (502, b'Invalid input from 2404:7a80:b021:6e00:506f:2d7c:b6fe:5175 to newxmesmtplogicsvrszb7.qq.com.', '2xxx')

weijiang1994 commented 2 years ago

@tianke0711 你确定你配置正确了吗?

tianke0711 commented 2 years ago

@weijiang1994 试了qq 的还是有错误啊 我想问一下问用户名2xx@qq.com 是否包含后面的后缀名啊qq.com? 我包含了,但是还是错误 smtplib.SMTPSenderRefused: (503, b'Error: need EHLO and AUTH first !'

weijiang1994 commented 2 years ago

@weijiang1994 试了qq 的还是有错误啊 我想问一下问用户名2xx@qq.com 是否包含后面的后缀名啊qq.com? 我包含了,但是还是错误 smtplib.SMTPSenderRefused: (503, b'Error: need EHLO and AUTH first !'

需要后缀名,你这报错明显是授权错误

tianke0711 commented 2 years ago

@weijiang1994 我在python shell测试下面代码 发送成功。 为啥你的代码不行啊 https://www.cxybb.com/article/weixin_42008966/103712538 from flask import Flask from flask_mail import Mail from flask_mail import Message import os

app = Flask(name) app.config['MAIL_SERVER'] = 'smtp.qq.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USE_SSL'] = True

app.config['smtp.UseDefaultCredentials'] = True

app.config['smtp.EnableSsl'] = True

app.config['MAIL_USERNAME'] = '你的QQ@qq.com' app.config['MAIL_PASSWORD'] = '你的授权码' app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]' app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin 你的QQ@qq.com' app.config['FLASKY_ADMIN'] = 'FLASKY_ADMIN' mail = Mail(app)

msg = Message('Test Mail', sender='你的QQ@qq.com', recipients=['你的QQ或者其他邮箱@qq.com']) msg.body = 'This is the plain text body' msg.html = 'This is the HTML body' with app.app_context(): mail.send(msg)

weijiang1994 commented 2 years ago

@weijiang1994 我在python shell测试下面代码 发送成功。 为啥你的代码不行啊 https://www.cxybb.com/article/weixin_42008966/103712538 from flask import Flask from flask_mail import Mail from flask_mail import Message import os

app = Flask(name) app.config['MAIL_SERVER'] = 'smtp.qq.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USE_SSL'] = True

app.config['smtp.UseDefaultCredentials'] = True

app.config['smtp.EnableSsl'] = True

app.config['MAIL_USERNAME'] = '你的QQ@qq.com' app.config['MAIL_PASSWORD'] = '你的授权码' app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]' app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin 你的[QQ@qq.com](mailto:QQ@qq.com)' app.config['FLASKY_ADMIN'] = 'FLASKY_ADMIN' mail = Mail(app)

msg = Message('Test Mail', sender='你的QQ@qq.com', recipients=['你的QQ或者其他邮箱@qq.com']) msg.body = 'This is the plain text body' msg.html = 'This is the HTML body' with app.app_context(): mail.send(msg)

可能我的代码有问题啊

tianke0711 commented 2 years ago

@weijiang1994 ok 啦 MAIL_PASSWORD= 'xxx' # 设置邮箱秘钥,不是登录密码而是申请SMTP时自动生成的秘钥 我无意中注释的#去掉了 打印一下用户名和密码就知道了。

tianke0711 commented 2 years ago

@weijiang1994 现在用户验证码验证改造好了。因为可能有一些陌生和恶意用户注册,为了限制用户量。 我打算进行实名验证和审核。比如用户提交自己的注册信息以及姓名等个人信息后,需要等待我审核,等我审核后,觉得是管理员认可的用户,才能让其注册成功。这样的情况下,你觉得需要修改哪些方面以及可有相关的模版等。

weijiang1994 commented 2 years ago

@tianke0711 https://github.com/weijiang1994/university-bbs/blob/main/bbs/blueprint/post.py#L37 可以参考这个

tianke0711 commented 2 years ago

@weijiang1994 好的 我一会看看!你能否把思路稍微解释一下,比如我需要修改哪些表以及新建哪些表,还有哪几个file可能需要修改。