Python 进阶
Python 协程实现原理
dict 和 set 实现原理
Python 线程安全
Python 抽象语法树(AST)
Python 日志输出
Python 扩展入门(一)
Python 程序执行原理
Python 垃圾回收
Python 动态创建类
检查工具
PyFrameObject
yield 生成器工作原理
dict 设计与实现
Python 性能分析原理
PyCodeObject
Python 弱引用
Python 性能分析原理(二)
Python 源码分析(一)
Python Annotated
Python 依赖注入
python freelist
python代码编译成pyc
Python mmap 内存映射文件
Python值得学习的内容
async Future 对象
asyncio loop的实现
asyncio.sleep 的实现
asyncio 原理
Python 代码加密
Python Token类型
Python 扩展入门(二)
Python 性能优化
本文档使用 MrDoc 发布
-
+
首页
检查工具
### Pyright 由 Microsoft 提供的静态类型检查工具 > https://github.com/microsoft/pyright ### mypy 静态类型检查工具,检查 Python 代码中的类型错误。 > https://github.com/python/mypy ### bandit 安全性检查工具,查找代码中的安全漏洞。 > https://github.com/PyCQA/bandit 使用方法: ``` pip install bandit # 扫描单个文件 bandit example.py # 扫描整个项目目录 bandit -r ./your_project # 扫描指定文件 bandit file1.py file2.py file3.py # 排除某些目录 bandit -r ./your_project -x tests/,venv/ # 生成报告 bandit -r ./your_project -f html -o bandit-report.html # HTML 格式 bandit -r ./your_project -f json -o bandit-report.json # JSON 格式 ``` 常见的安全漏洞: ``` hashlib.md5() # 使用了不安全的哈希算法,MD5 算法已经不再安全,容易被破解 requests.post(...) # 没有 timeout 参数 ``` >s 对于 MD5 哈希算法的问题,我来介绍几种解决方案: #### 方案1:明确指定 MD5 不用于安全目的 ``` # 明确指定 MD5 不用于安全目的 def content_md5(content): hash_md5 = hashlib.md5(usedforsecurity=False) # 明确声明不用于安全目的 hash_md5.update(content) return hash_md5.hexdigest() ``` #### 方案2:如果用于安全相关目的(如密码哈希),建议使用更安全的算法 ``` # 使用 SHA-256 def content_hash(content): hash_obj = hashlib.sha256() hash_obj.update(content) return hash_obj.hexdigest() ``` #### 方案3:如果是用于密码哈希,最好使用专门的密码哈希函数 ``` # 使用 bcrypt(需要安装:pip install bcrypt) import bcrypt def hash_password(password: str) -> str: salt = bcrypt.gensalt() return bcrypt.hashpw(password.encode(), salt) def verify_password(password: str, hashed: str) -> bool: return bcrypt.checkpw(password.encode(), hashed) ``` #### 方案4:如果需要更高安全性,可以使用 BLAKE2 ``` # 使用 BLAKE2 def content_hash(content): hash_obj = hashlib.blake2b() hash_obj.update(content) return hash_obj.hexdigest() ``` #### 总结 - 如果只是用于文件校验或数据完整性验证: - 可以继续使用 MD5,但添加 `usedforsecurity=False` 参数 - 或者切换到 SHA-256,提供更好的安全性 - 如果用于安全目的: - `密码哈希`:使用 bcrypt、Argon2 或 PBKDF2 - `一般哈希`:使用 SHA-256 或 BLAKE2 - 如果是 Django 项目: - 直接使用 Django 的密码哈希系统 ``` from django.contrib.auth.hashers import make_password, check_password hashed = make_password(password) is_valid = check_password(password, hashed) ``` >s 关于网络请求的超时参数问题: **网络请求应该始终设置超时参数,这是一个最佳实践** 为什么要设置超时: - 防止请求无限期挂起 - 避免资源耗尽(连接池、线程等) - 提高应用程序的可靠性 - 便于故障排除和监控 常见的超时设置方式: ``` import requests # 基础用法 response = requests.get(url, timeout=10) # 10秒超时 # 区分连接超时和读取超时 response = requests.get(url, timeout=(3, 7)) # 连接超时3秒,读取超时7秒 # 使用 Session session = requests.Session() session.request_timeout = 10 # 设置会话级别的超时 ``` ### isort 主页:https://github.com/PyCQA/isort 作用:用于排序和组织导入语句。
gaojian
2025年2月21日 10:28
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码