吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 775|回复: 21
上一主题 下一主题
收起左侧

[Python 原创] 分享一个相对安全的文件摆渡系统内外网文件中转内外网传文件方案,附带源码!

  [复制链接]
跳转到指定楼层
楼主
omar111 发表于 2026-5-21 17:15 回帖奖励
本帖最后由 omar111 于 2026-5-22 08:49 编辑

有些特殊环境如一些政府机关,企业,医疗结构需要把外网的表格传输到内网上,专业的文件摆渡系统或服务器价格昂贵所以自己借助AI做了这么一个小型表格中转系统,大家可以再二次开发。做好成品也可以分享。传统的文件传输方式如:共享,或者FTP都有安全隐患,
因为文件不可控有可能被木马钻缝隙。所以就想到这个相对安全的方法,
主机A为外网电脑双网卡,主机B为内网电脑双网卡,把A和B电脑单独组建一个小型局域网,
只通过特定IP段访问,如A电脑设置为255.255.255.1B电脑设置为255.255.255.2


因为是需要把外网A电脑上的表格上传到内网B电脑所以B电脑只开放50000端口其他端口全部关闭,B电脑配置好Python然后运行该代码,然后A电脑访问http://255.255.255.2:50000即可上传表格到内网电脑代码根目录新建的uploads文件夹,
因为代码只限制XLS和XLSX扩展名,并且会校验表格完整性防止伪装表格文件达到安全中转的目的。
源码只有4k大小非常适合轻量化运行。源码链接: 内外网文件中转站.zip (3.99 KB, 下载次数: 32)


大家可以评价一下该方案的优缺点,或者更好的内外网传输文件的建议和方案。
单向文件摆渡(外网→内网单向)安全分析一、整体架构边界
  • 主机 A:外网侧,网卡 1 接入外网,网卡 2 对接私有互联网段
  • 主机 B:内网侧,网卡 1 接入涉密内网,仅开放50000 端口,其余端口全部封禁
  • 通信规则:仅允许外网向内网单向传文件,内网数据禁止向外流出
二、现有安全优势
  • 端口收敛极致:内网主机仅单端口放行,网络攻击入口被压缩到最小,常规扫描、端口入侵基本失效。
  • 单向阻断防泄密:策略约束数据只能外网入内网,从链路规则上杜绝内网机密数据外泄、木马回传窃取信息。
  • 网段物理隔离生效:内外业务网无路由互通,仅专属互联通道做文件中转,无法跨网横向渗透。
  • 非法外联彻底封堵:其余端口全部关闭,内网程序无法主动对外建立连接,阻断恶意外联通道。
  • 上传文件格式验证:只限制上传格式XLS和XLSX,增加了文件完整性验证。
  • 上传增加了IP限制:系统自带IP限制,也可使用防火墙增加IP限制。






[Python] 纯文本查看 复制代码
import os
import uuid
from flask import Flask, render_template, request, jsonify
import openpyxl
import xlrd

def get_metadata():
    """获取脚本元数据"""
    return {'name': 'github_user_info', 'description': '上传', 'dependencies': [], 'parameters': [], 'category': '上传', 'icon': 'C:\\Users\\Night Shang\\Desktop\\gjx\\my-toolbox-new\\assets\\icons\\icon-mo.ico'}


# 初始化Flask应用
app = Flask(__name__)

# 配置项
# 上传文件存储目录
UPLOAD_FOLDER = 'uploads'
# 允许上传的文件后缀
ALLOWED_EXTENSIONS = {'xls', 'xlsx'}
# 最大文件大小 50MB
app.config['MAX_CONTENT_LENGTH'] = 50 * 1024 * 1024
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# 创建上传目录(不存在则自动创建)
if not os.path.exists(UPLOAD_FOLDER):
    os.makedirs(UPLOAD_FOLDER)

# 验证文件后缀是否合法
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

# Excel表格核心验证函数
def validate_excel(file_path, filename):
    """
    自定义Excel验证规则,可根据业务需求修改
    返回:(是否通过, 错误信息)
    """
    ext = filename.rsplit('.', 1)[1].lower()
    try:
        # 处理.xlsx文件
        if ext == 'xlsx':
            wb = openpyxl.load_workbook(file_path)
            # 读取第一个工作表
            ws = wb.active
            row_count = ws.max_row
            col_count = ws.max_column

        # 处理.xls文件
        elif ext == 'xls':
            wb = xlrd.open_workbook(file_path)
            ws = wb.sheet_by_index(0)
            row_count = ws.nrows
            col_count = ws.ncols
        # ================= 自定义验证规则 ==============
        # 规则1:表格不能为空(至少1行数据+表头)
        if row_count < 2:
            return False, "表格数据为空,请检查文件内容"

        # 规则2:至少包含2列数据
        if col_count < 2:
            return False, "表格列数不足,至少需要2列"

        # 规则3:表头不能为空(可自定义表头名称)
        # 这里以第一行前两列为例
        if ext == 'xlsx':
            header1 = ws.cell(row=1, column=1).value
            header2 = ws.cell(row=1, column=2).value
        else:
            header1 = ws.cell_value(0, 0)
            header2 = ws.cell_value(0, 1)

        if not header1 or not header2:
            return False, "表头不能为空,请完善表格表头"

        # 验证通过
        return True, "Excel表格验证通过"

    except Exception as e:
        return False, f"文件解析失败:{str(e)}"

# 首页路由
@app.route('/')
def index():
    return render_template('index.html')

# 文件上传接口
@app.route('/upload', methods=['POST'])
def upload_file():
    # 检查是否有文件上传
    if 'file' not in request.files:
        return jsonify({"code": 1, "msg": "未选择文件"})

    file = request.files['file']
    if file.filename == '':
        return jsonify({"code": 1, "msg": "未选择文件"})

    # 验证文件格式
    if not allowed_file(file.filename):
        return jsonify({"code": 1, "msg": "仅支持上传 .xls 和 .xlsx 格式文件"})

    # 生成唯一文件名,防止重名覆盖
    unique_filename =str(uuid.uuid4())+ "_" + file.filename
    file_path = os.path.join(app.config['UPLOAD_FOLDER'], unique_filename)

    try:
        # 保存文件
        file.save(file_path)

        # 执行Excel验证
        is_valid, msg = validate_excel(file_path, file.filename)
        if not is_valid:
            # 验证失败,删除已上传文件
            os.remove(file_path)
            return jsonify({"code": 1, "msg": msg})

        # 上传+验证全部成功
        return jsonify({"code": 0, "msg": f"上传成功!{msg}"})

    except Exception as e:
        # 异常处理,删除无效文件
        if os.path.exists(file_path):
            os.remove(file_path)
        return jsonify({"code": 1, "msg": f"上传失败:{str(e)}"})

if __name__ == '__main__':
    # 0.0.0.0 允许局域网所有设备访问
    app.run(host='0.0.0.0', port=50000, debug=True)

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
xnink + 1 + 1 鼓励转贴优秀软件安全工具和文档!
義薄云天 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
Sandyang 发表于 2026-5-21 22:49
只要两台电脑能上网,就没有什么安全不安全,最安全的就是没有网络,物理隔离

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zmh886 + 1 + 1 我很赞同!

查看全部评分

推荐
zmh886 发表于 2026-5-22 11:20
一、关键违规点
物理边界被突破
外网机、内网机直接组网互通,彻底破坏内外网物理隔离原则,打破网络安全边界防护,违背等保、保密分级保护硬性要求。
双网卡桥接互通属于明令禁止行为
机关、医疗、政企内网管控条例里,严禁终端以双网卡形式同时接入外网、内网,此操作等同于私自搭建跨网通道。
安全风险并未实质规避
即便限定 IP 段,文件、恶意程序依旧可双向流转,木马、病毒能顺着自建通道入侵内网,和 FTP、共享隐患本质一致,无法杜绝恶意渗透。
3#
義薄云天 发表于 2026-5-21 17:19
4#
lnshijia 发表于 2026-5-21 17:22
内网聊天软件+杀毒软件
5#
SU1314520 发表于 2026-5-21 17:22
太感谢了正好需要!!如果出多一个app检测就好了
6#
 楼主| omar111 发表于 2026-5-21 17:24 |楼主
義薄云天 发表于 2026-5-21 17:19
非常感谢,正好需要拿来研究一下

可以评价一下该方案的优缺点,或者更好的建议。
7#
rhci 发表于 2026-5-21 18:03
其实可以做个映射,单独把B的上传页面映射到A指定的端口,然后 C访问A的指定端口,实际是用的B的服务,这样理解是不是可行,我感觉也更好点。
8#
人时地事 发表于 2026-5-21 19:37
能不能这样 做一个二维码 扫描二维码可以获取表格信息等
9#
zmh886 发表于 2026-5-21 19:47
如果都能联网,实际可以拉个群分享文件?
10#
houdongen 发表于 2026-5-21 22:19
0和1 一旦到了1所谓的安全就是你以为的安全
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-5-23 06:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表