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

[学习笔记](Python3)防止SQL注入、XSS攻击和文件上传漏洞

学习笔记:防止SQL注入、XSS攻击和文件上传漏洞(Python3)

本笔记由生成式大模型GPT-4o自动整理。注意AI可能犯错。代码和理论由GPT-4o(2024-5-21)自行撰写未经人工复核。

参数化查询防SQL注入

参数化查询通过将SQL语句和数据分离来防止SQL注入:

import pymysqlconnection = pymysql.connect(host='localhost', user='user', password='passwd', db='db')
cursor = connection.cursor()
username, password = "admin", "password123"sql = "SELECT * FROM users WHERE username=%s AND password=%s"
cursor.execute(sql, (username, password))
result = cursor.fetchall()
防止XSS攻击的方法
  1. 输出编码:在输出到网页时进行编码。

  2. 内容安全策略(CSP):使用CSP头限制浏览器执行或加载的内容。

    Content-Security-Policy: default-src 'self';
    
  3. 输入验证和清理:严格验证和清理用户输入。

  4. 使用安全的库和框架:例如,使用Django。

  5. 设置HTTP头

    X-XSS-Protection: 1; mode=block
    
文件上传漏洞的解决方法(Python3后端)
  1. 文件类型验证

    from werkzeug.utils import secure_filename
    from flask import Flask, request, abortapp = Flask(__name__)
    app.config['UPLOAD_FOLDER'] = '/path/to/upload'
    app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg', 'gif'}def allowed_file(filename):return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']@app.route('/upload', methods=['POST'])
    def upload_file():if 'file' not in request.files:abort(400, 'No file part')file = request.files['file']if file.filename == '':abort(400, 'No selected file')if file and allowed_file(file.filename):filename = secure_filename(file.filename)file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))return 'File successfully uploaded'else:abort(400, 'File type not allowed')
    
  2. 文件名安全处理

    from werkzeug.utils import secure_filenamefilename = secure_filename(file.filename)
    
  3. 限制文件大小

    app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024  # 16MB
    
  4. 存储位置和权限

    import osUPLOAD_FOLDER = '/path/to/upload'
    if not os.path.exists(UPLOAD_FOLDER):os.makedirs(UPLOAD_FOLDER, exist_ok=True)
    os.chmod(UPLOAD_FOLDER, 0o700)
    
总结

通过参数化查询防止SQL注入,使用输出编码、CSP、输入验证等技术防止XSS攻击,并在Python3后端通过文件类型验证、文件名处理、限制文件大小等措施防止文件上传漏洞,可以有效提高Web应用的安全性。

http://www.lryc.cn/news/351704.html

相关文章:

  • 西门子CPU与汇川伺服通信与控制
  • 移动硬盘无法读取怎么修复?简单八步,轻松搞定!
  • c4d云渲染是工程文件会暴露吗?
  • C语言/数据结构——每日一题(有效的括号)
  • STM32使用旋转编码开关
  • OneMO同行 心级服务:中移物联OneMO模组助力客户终端寒冷环境下的稳定运行
  • 爬虫视图展示之 Power BI
  • 微软刚发布的Copilot+PC为什么让Intel和AMD尴尬?2024 AI PC元年——产业布局及前景展望
  • 抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具
  • 类的组合、作用域与可见性、类的静态成员、单例模式、
  • 高速公路定向广播(声光一体) HT-600D
  • 2024离婚新规已生效,不用等30天冷静期,线上开庭
  • 从零搭建python环境:深入解析虚拟环境与Python版本管理
  • windows安装官方正版notepad++
  • netty-socketio 集群随记
  • 查看目录或文件的磁盘使用情况
  • 如何选择合适的自动化框架
  • Java面试进阶指南:高级知识点问答精粹(二)
  • thinkphp 使用模型实现多表连接查询
  • LeetCode674:最长连续递增序列
  • Java技术精粹:高级面试问题与解答指南(一)
  • 数据可视化技术头歌测试合集
  • 【linux-IMX6ULL-字符设备驱动简单框架实验】
  • 3D模型旋转显示不全怎么办---模大狮模型网
  • DLRover:蚂蚁集团开源的AI训练革命
  • ubuntu_概念
  • Oracle递归查询笔记
  • FaceFusion源码框架解读
  • React项目知识积累(三)
  • 前端实现打印功能