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

Python安全编程:保护你的代码和数据

Python安全编程保护你的代码和数据前言大家好我是第一程序员名字大人很菜。作为一个非科班转码、正在学习Rust和Python的萌新最近我开始关注Python的安全编程。说实话一开始我对安全编程的重要性认识不足觉得只要代码能运行就可以了。但随着学习的深入我发现安全编程是非常重要的尤其是在处理敏感数据或构建Web应用时。今天我想分享一下我对Python安全编程的学习心得希望能给同样是非科班转码的朋友们一些参考。一、常见的安全漏洞1.1 SQL注入SQL注入是一种常见的安全漏洞攻击者通过在输入中插入SQL代码来执行恶意操作# 不安全的代码 import sqlite3 def get_user(username): conn sqlite3.connect(database.db) cursor conn.cursor() # 不安全直接拼接SQL语句 cursor.execute(fSELECT * FROM users WHERE username {username}) user cursor.fetchone() conn.close() return user # 攻击者可以输入 OR 11 -- # 这会导致执行SELECT * FROM users WHERE username OR 11 --1.2 跨站脚本攻击XSSXSS攻击允许攻击者在网页中注入恶意脚本# 不安全的代码 from flask import Flask, request, render_template app Flask(__name__) app.route(/) def index(): name request.args.get(name, World) # 不安全直接将用户输入插入到HTML中 return fh1Hello, {name}!/h1 # 攻击者可以输入scriptalert(XSS)/script # 这会导致在网页中执行JavaScript代码1.3 跨站请求伪造CSRFCSRF攻击诱导用户执行非预期的操作# 不安全的代码 from flask import Flask, request, session app Flask(__name__) app.secret_key secret app.route(/transfer, methods[POST]) def transfer(): # 不安全没有验证请求来源 amount request.form.get(amount) recipient request.form.get(recipient) # 执行转账操作 return fTransferred {amount} to {recipient}1.4 不安全的密码存储不安全的密码存储方式可能导致密码泄露# 不安全的代码 import sqlite3 def register_user(username, password): conn sqlite3.connect(database.db) cursor conn.cursor() # 不安全明文存储密码 cursor.execute(INSERT INTO users (username, password) VALUES (?, ?), (username, password)) conn.commit() conn.close()二、安全编程最佳实践2.1 防止SQL注入使用参数化查询来防止SQL注入# 安全的代码 import sqlite3 def get_user(username): conn sqlite3.connect(database.db) cursor conn.cursor() # 安全使用参数化查询 cursor.execute(SELECT * FROM users WHERE username ?, (username,)) user cursor.fetchone() conn.close() return user2.2 防止XSS攻击对用户输入进行转义# 安全的代码 from flask import Flask, request, escape app Flask(__name__) app.route(/) def index(): name request.args.get(name, World) # 安全对用户输入进行转义 return fh1Hello, {escape(name)}!/h12.3 防止CSRF攻击使用CSRF令牌# 安全的代码 from flask import Flask, request, session, render_template from flask_wtf.csrf import CSRFProtect app Flask(__name__) app.secret_key secret csrf CSRFProtect(app) app.route(/transfer, methods[GET, POST]) def transfer(): if request.method POST: # 安全CSRF令牌会自动验证 amount request.form.get(amount) recipient request.form.get(recipient) # 执行转账操作 return fTransferred {amount} to {recipient} return render_template(transfer.html)2.4 安全存储密码使用哈希函数存储密码# 安全的代码 import sqlite3 import hashlib import os def register_user(username, password): conn sqlite3.connect(database.db) cursor conn.cursor() # 安全使用哈希函数存储密码 salt os.urandom(32) hashed_password hashlib.pbkdf2_hmac(sha256, password.encode(utf-8), salt, 100000) cursor.execute(INSERT INTO users (username, password_hash, salt) VALUES (?, ?, ?), (username, hashed_password, salt)) conn.commit() conn.close() def verify_password(username, password): conn sqlite3.connect(database.db) cursor conn.cursor() cursor.execute(SELECT password_hash, salt FROM users WHERE username ?, (username,)) result cursor.fetchone() if result: password_hash, salt result test_hash hashlib.pbkdf2_hmac(sha256, password.encode(utf-8), salt, 100000) return test_hash password_hash return False三、安全库的使用3.1 使用cryptography库cryptography库提供了各种加密功能# 安装cryptography # pip install cryptography from cryptography.fernet import Fernet # 生成密钥 key Fernet.generate_key() cipher_suite Fernet(key) # 加密数据 plaintext bHello, World! ciphertext cipher_suite.encrypt(plaintext) print(fEncrypted: {ciphertext}) # 解密数据 decrypted_text cipher_suite.decrypt(ciphertext) print(fDecrypted: {decrypted_text})3.2 使用pyjwt库pyjwt库用于处理JSON Web Tokens# 安装pyjwt # pip install pyjwt import jwt import datetime # 生成token payload { user_id: 123, exp: datetime.datetime.utcnow() datetime.timedelta(hours1) } secret secret_key token jwt.encode(payload, secret, algorithmHS256) print(fToken: {token}) # 验证token try: decoded jwt.decode(token, secret, algorithms[HS256]) print(fDecoded: {decoded}) except jwt.ExpiredSignatureError: print(Token has expired) except jwt.InvalidTokenError: print(Invalid token)3.3 使用passlib库passlib库用于密码哈希# 安装passlib # pip install passlib from passlib.hash import pbkdf2_sha256 # 哈希密码 hashed_password pbkdf2_sha256.hash(mypassword) print(fHashed password: {hashed_password}) # 验证密码 is_valid pbkdf2_sha256.verify(mypassword, hashed_password) print(fPassword is valid: {is_valid})四、安全配置4.1 环境变量管理使用环境变量存储敏感信息# 安装python-dotenv # pip install python-dotenv import os from dotenv import load_dotenv # 加载环境变量 load_dotenv() # 从环境变量获取敏感信息 secret_key os.getenv(SECRET_KEY) database_url os.getenv(DATABASE_URL) # 使用敏感信息 print(fSecret key: {secret_key}) print(fDatabase URL: {database_url})4.2 安全的文件权限设置安全的文件权限import os # 创建文件并设置权限 with open(secret.txt, w) as f: f.write(secret information) # 设置文件权限为600只有所有者可读写 os.chmod(secret.txt, 0o600)4.3 安全的网络配置使用安全的网络配置import ssl import socket # 创建安全的SSL连接 context ssl.create_default_context() with socket.create_connection((example.com, 443)) as sock: with context.wrap_socket(sock, server_hostnameexample.com) as ssock: print(fSSL version: {ssock.version()}) print(fCipher: {ssock.cipher()})五、Python与Rust的对比作为一个同时学习Python和Rust的转码者我发现对比学习是一种很好的方法5.1 安全特性对比Python动态类型运行时错误需要手动处理安全问题Rust静态类型编译时错误内存安全线程安全安全优势Rust在编译时就能发现很多安全问题开发效率Python开发效率高Rust开发效率相对较低5.2 学习心得Python的优势开发效率高生态丰富Rust的优势内存安全线程安全相互借鉴从Python学习快速开发从Rust学习安全编程六、实践项目推荐6.1 安全项目密码管理器实现一个安全的密码管理器安全的Web应用构建一个具有安全特性的Web应用加密工具实现一个文件加密工具安全扫描器开发一个简单的安全扫描工具七、学习方法和技巧7.1 学习方法循序渐进先学习基础安全知识再学习高级安全技术项目实践通过实际项目来巩固知识文档阅读仔细阅读安全编程相关的文档社区交流加入社区向他人学习7.2 常见问题和解决方法安全漏洞定期进行安全扫描及时修复漏洞密码管理使用专业的密码管理工具依赖安全定期更新依赖库避免使用有漏洞的依赖安全意识提高安全意识定期学习安全知识八、总结Python安全编程是非常重要的尤其是在处理敏感数据或构建Web应用时。作为一个非科班转码者我深刻体会到安全编程的重要性。我的学习过程并不是一帆风顺的遇到了很多困难和挫折但通过不断地实践和学习我逐渐掌握了Python安全编程的各种技巧。保持学习保持输出。虽然现在我还是个菜鸡但我相信只要坚持总有一天能成为真正的「第一程序员」

相关文章:

Python安全编程:保护你的代码和数据

Python安全编程:保护你的代码和数据 前言 大家好,我是第一程序员(名字大,人很菜)。作为一个非科班转码、正在学习Rust和Python的萌新,最近我开始关注Python的安全编程。说实话,一开始我对安全编…...

《深入理解Mybatis原理》MyBatis动态SQL原理

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

《深入理解Mybatis原理》MyBatis数据源与连接池详解

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

SpringBoot的两种启动方式原理

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

极客老王说Agent:具备“看屏幕”能力的Agent如何击穿传统接口无法触达的业务荒原?

站在2026年4月这个“智能体元年”的节点回望,人工智能的演进已然完成了一次惊人的范式跃迁。根据最新的行业动态显示,Agent正从单纯依赖文本指令的“对话框”形态,加速向具备多模态感知、尤其是具备“看屏幕”能力的“数字员工”形态进化。在…...

单相级联H桥(CHB)多电平变换器并网仿真,网侧电压220V PR电压外环 ,PI电流内环,有...

单相级联H桥(CHB)多电平变换器并网仿真,网侧电压220V PR电压外环 ,PI电流内环,有独立的电容电压平衡控制,使用三个全桥子模块,可输出7电平,可供参考学习单相级联H桥多电平变换器这…...

西门子S7-200SMART PLC与组态王7.0通信在压铸机控制中的应用:附带完整程序与多媒体资料

西门子S7-200SMART PLC和组态王7.0通信 控制压铸机 附带PLC程序组态王程序组态王运行视频组态王运行图片 最近在折腾压铸机自动化改造项目,用西门子S7-200 SMART PLC配合组态王7.0做上位监控。这个组合在中小型设备上还挺常见,但实际调试时通信配置这块…...

Redis 实战篇1.4 (Redis优化秒杀)

Redis优化秒杀原流程思路Redis优化秒杀在Redis中库存用String数据类型存储,为了确保一人一单,则订单id存储用Set数据类型保证数据的唯一性lua脚本保证原子性异步秒杀方案案例:需求创建订单(还没完成明天继续)// 解锁的…...

收藏!前端打工人破局指南:转AI Agent,告别重复劳动,薪资翻倍

作为前端打工人,那种深陷内耗的痛,真的只有自己懂👇 每天围着页面布局、接口联调死磕,需求堆成山,兼容问题调不停,看似忙碌的日子,全是机械的重复劳动,没有一点成长空间。 干得越久越…...

LeetCode 二叉树高频双题绝杀!第 k 小元素 + 右视图,小白一遍学会

目录 前言 第一题:二叉搜索树中第 K 小的元素 🎯 题目要求 💡 小白秒懂核心思路 ✅ 完整解题代码 📝 通俗代码解析 第二题:二叉树的右视图 🎯 题目要求 💡 小白秒懂核心思路 ✅ 完整解…...

如何从视频中高效提取幻灯片:智能工具应用指南

如何从视频中高效提取幻灯片:智能工具应用指南 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾遇到这样的困扰:参加线上会议后想整理演示文稿&#x…...

短视频 SEO 优化对于新手有什么建议_如何分析短视频的 SEO 效果

短视频 SEO 优化对于新手有什么建议 在当今数字化时代,短视频平台已经成为了人们获取信息和娱乐的重要途径。无论是抖音、快手,还是TikTok,短视频内容的迅速增长引发了广大创作者对SEO(搜索引擎优化)的关注。对于新手…...

贾子 Kucius 的证伪主义批判与学术评价体系重构:文明持续运行的新范式

贾子 Kucius 的证伪主义批判与学术评价体系重构:文明持续运行的新范式摘要 贾子 Kucius 系统批判了波普尔证伪主义作为西方中心论话语霸权的“证死你,证伟我”双标本质,揭示其逻辑悖论与认知殖民机制。他提出以“文明持续运行能力”替代“可证…...

使用 SEO 搜索引擎营销工具需要多长时间见效

SEO 搜索引擎营销工具需要多长时间见效 随着互联网的普及和数字营销的迅速发展,越来越多的企业开始重视SEO(搜索引擎优化)工具的使用。SEO工具不仅能帮助企业提升网站在搜索引擎中的排名,还能带来更多的流量和潜在客户。许多人在…...

国内大模型托管平台推荐:四大平台选型指南

随着大模型技术加速落地,模型托管平台已成为开发者不可或缺的基础设施。本文梳理了2025年国内主流的四大大模型托管平台,从核心优势、适用场景到选型建议,为你提供一份实用的选型指南。一、模力方舟:国产开源生态的“基石”推荐指…...

从‘滋滋’声到过认证:一个Buck电源的EMI实战整改笔记(附PCB布局优化技巧)

从‘滋滋’声到过认证:一个Buck电源的EMI实战整改笔记(附PCB布局优化技巧) 1. 问题浮现:EMI测试中的异常现象 那是一个周五的下午,实验室的EMI测试仪屏幕上跳动的红色曲线格外刺眼。我们团队开发的IoT设备在CE认证测试…...

齿轮基础参数

基于传统势能法含裂纹斜齿轮时变啮合刚度(裂纹斜齿轮),代码保证运行无问题,出图效果如页面简介齿轮传动系统里最怕遇到啥?裂纹呗!尤其是斜齿轮这种接触线斜着走的家伙,一旦出现裂纹整个时变刚度曲线直接抽风…...

三菱FX5U ModbusTCP从站配置避坑指南:从IP冲突到通讯成功的完整流程

三菱FX5U ModbusTCP从站配置避坑指南:从IP冲突到通讯成功的完整流程 工业自动化领域中,ModbusTCP通讯协议因其简单高效的特点,成为PLC与上位机交互的常用方式。三菱FX5U系列PLC作为一款高性价比的可编程控制器,在中小型自动化项目…...

中航迈特光束整形金属3D打印技术取得重要进展,多种材料已成功验证

中航迈特在金属3D打印装备研发方面持续发力,尤其是光束整形技术近期取得重要进展。在本届TCT亚洲展,它推出的MT280搭载了无级点环光斑能量智调系统,是光束整形金属3D打印当前较新的看点。据3D打印技术参考了解,无级点环光斑能量智…...

CSDN首页发布文章意见反馈

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

如何利用爬虫技术快速精准地抓取目标数据?

1. 爬虫策略:从"无脑抓"到"精准狙击" 我刚入行时犯过一个典型错误——用单线程脚本无差别抓取整站数据,结果不仅触发反爬机制被封IP,还浪费三天时间清洗90%的无用数据。现在回头看,合理的爬虫策略就像狙击手…...

并联型有源电力滤波器APF的三相三线制模型及其Simulink仿真研究——基于瞬时无功功率理论...

并联型有源电力滤波器APF三相三线模型都包括,simulink仿真利用基于瞬时无功功率理论的ip-iq谐波检测算法,对三相三线制并联型APF控制系统进行建模与Matlab仿真最近在搞三相三线制并联型APF的仿真,发现基于ip-iq谐波检测的方案确实挺有意思。这…...

Three.js实战:打造交互式3D中国地图可视化

1. 从零开始搭建3D中国地图 第一次接触Three.js时,我被它强大的3D渲染能力震撼到了。作为一个长期从事数据可视化的开发者,我一直在寻找能够将地理数据以更生动方式呈现的工具。Three.js配合D3.js的组合,完美解决了这个问题。 1.1 数据准备与…...

水产养殖自动控制系统:远程操控,鱼塘24小时在线守护

在我国水产养殖产业快速发展的今天,“产量高、品质优、成本低、更环保”已成为养殖从业者的核心追求。但传统养殖模式中,人工巡检效率低、水质调控凭经验、投喂施肥不精准等问题,不仅增加了劳动强度,还易导致养殖生物应激、病害频…...

实战指南:用Python的pyttsx3库打造你的专属语音助手

1. 从零认识pyttsx3:你的代码会说话 第一次听到电脑用标准播音腔朗读出我写的文字时,那种感觉就像小时候收到会说话的生日贺卡。pyttsx3这个神奇的Python库,能让任何文本通过声卡变成人声。不同于需要联网的语音合成服务,它完全离…...

OpenClaw学习助手:Qwen3.5-9B自动整理学术PDF笔记

OpenClaw学习助手:Qwen3.5-9B自动整理学术PDF笔记 1. 为什么需要自动化文献整理 作为一名每天需要阅读大量文献的研究者,我长期被两个问题困扰:一是PDF里的关键信息需要手动复制粘贴到笔记软件,二是不同文献的结论难以横向对比。…...

Windows下IDEA远程开发全离线配置指南(含JetBrainsClient避坑)

Windows下IDEA远程开发全离线配置实战指南 最近在给某金融机构做内部开发环境迁移时,遇到了一个棘手问题:他们的生产网络完全隔离外网,但开发团队又急需使用IDEA的远程开发功能。经过两周的反复试验,终于摸索出一套完整的离线配置…...

Go语言的网络编程:从TCP到WebSocket

Go语言的网络编程:从TCP到WebSocket 网络编程的重要性 在现代软件开发中,网络编程是一项基本技能。通过网络编程,我们可以: 构建客户端-服务器应用程序实现分布式系统开发 Web 应用和 API实现实时通信功能与其他服务进行集成 Go 语…...

Edge/Chrome用户必看:3种免费工具批量清理失效书签(2023实测)

Edge/Chrome用户必备:2023年高效清理失效书签的3种解决方案 每次打开浏览器,看到密密麻麻的书签栏却找不到真正可用的链接?这可能是大多数互联网用户的日常困扰。根据2023年用户调研数据显示,平均每位浏览器用户拥有超过200个书签…...

Go语言的项目结构:从单体到微服务

Go语言的项目结构:从单体到微服务 项目结构的重要性 在软件开发中,项目结构是影响代码质量和可维护性的关键因素。一个良好的项目结构可以: 提高代码的可读性和可维护性促进团队协作和代码共享便于测试和部署支持代码的重用和扩展降低项目…...