别以为“能跑就行”就安全
很多人的Python项目,上线前连基本的安全检查都没做。
你以为只是小脚本?黑客可不这么想。
2023年Snyk报告显示:84%的Python项目存在至少一个高危漏洞。
你写的那几行requests.get(),可能就是后门入口。
# 千万别这么干!
url = input("请输入URL: ")
response = requests.get(url) # 直接拼接用户输入?
eval() 是定时炸弹,不是魔法棒 💣
eval(input()) 这种写法,等于把服务器钥匙递给陌生人。
有人用它“方便调试”,结果被注入任意代码。
真实案例:某内部工具因eval执行了__import__('os').system('rm -rf /'),整台机器变砖。
# 错误示范
user_code = input("输入表达式: ")
result = eval(user_code) # 🚨 危险!
# 正确做法:用 ast.literal_eval 或完全避免
import ast
try:
result = ast.literal_eval(user_code)
except (ValueError, SyntaxError):
print("非法输入!")
环境变量泄露?你的 .env 文件正在“直播” 🔓
很多人把数据库密码、API密钥直接写进代码或.gitignore漏掉的.env里。
GitHub每天扫描出上万条硬编码密钥。
2025年GitGuardian数据:每1000次提交就有1次包含敏感信息。
# 别这样暴露密钥
API_KEY = "sk-xxxxx"# 直接写死?删库跑路倒计时开始
# 用 python-dotenv + 严格权限控制
from dotenv import load_dotenv
import os
load_dotenv()
API_KEY = os.getenv("API_KEY") # 并确保 .env 不进版本库!
SQL注入?你以为用了ORM就高枕无忧?
SQLAlchemy、Django ORM 虽安全,但一旦拼接 raw SQL,照样翻车。
比如 filter(f"name = '{user_input}'") —— 经典注入温床。
黑客输入 ' OR '1'='1,你的用户表就全露了。
# 危险!字符串拼接查询
query = f"SELECT * FROM users WHERE name = '{name}'"
# 安全做法:参数化查询
session.execute(
text("SELECT * FROM users WHERE name = :name"),
{"name": name}
)
依赖包是隐形后门,你却天天 pip install -U 🐍
第三方库可能含恶意代码。
2024年PyPI下架了270+个伪装成工具包的挖矿/窃密库。
更可怕的是:你项目的依赖树平均有73个间接依赖(来源:Snyk State of Open Source Security 2025)。
# 别盲目升级!先扫描
pip install safety
safety check # 检查已安装包是否有已知漏洞
# 或用 pip-audit(官方推荐)
pip install pip-audit
pip-audit
最后说句扎心的:安全不是功能,是底线
写代码不是搭积木,每一行都可能成为攻击面。
别等数据被拖库、服务器被控才后悔。
花10分钟加个输入校验,比事后擦屁股强一万倍。
“在网络安全里,‘暂时没人黑我’不等于‘安全’,只是你还没被盯上。”
现在,立刻,马上——
去翻翻你上周写的那个Flask小项目,
看看有没有中招?🙃