别再裸奔了,你的项目代码安全吗,再不加密就out了
在工作中,有时候我们需要部署自己的Python代码 或进行私有化部署时,尤其现在都是通过docker镜像部署,我们并不希望别人能够看到自己的Python源程序。
加密Python源代码的方式,是将.py文件转化为.so文件,这样加密的可靠性非常高,无法破解,也就很好地保护了源代码。
加密过程中会产生很多多余文件,加密后可以删除,我这里用了脚本一步完成
项目文件加密
将加密的文件移至对应目录下
删除原文件和生成的附属文件夹
设备:Mac
项目:简单测试项目
我们需要在系统环境中安装一些准备工具,包括python3-dev,gcc,Cython,其中Cython为Python的第三方模块。安装的命令如下:
$ brew install gcc
$ pip3 install cython linux上安装
$ sudo apt install python3-dev gcc
$ pip3 install cython
创建测试项目:
目录如下:
aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" />
简单介绍文件:
入口函数main.py:
from origin import Hello
t = Hello()
t.say()
被加密的文件origin.py:
class Hello():
def say(self):
print("hello world !")
加密的文件setup.py:
dirPath = "origin.py"
# 1、文件加密
setup(ext_modules = cythonize([dirPath]))
print("加密完成")
进入项目下,执行加密文件setup.py:
python3 setup.py build_ext
多了一个文件:origin.c 和 一个文件夹:build
build里就是我们加密后的文件,手动将build/lib下的对应文件替换掉源文件即可,对应的.c文件也可删除
注意:不同的系统产生的build的二级目录不同,但加密后的文件都是lib开头的目录下,都是以.so结尾
处理后的项目目录为:
我们发现原来的origin.py:被替换成了加密后的.so文件
测试项目是否还能正常运行:
aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" />
项目加密完成!
因为我们不可能通过加密项目,然后一步步移动加密文件,然后删除,再部署项目,那样会导致整个项目代码很乱,也不方便操作
加密文件也是Python代码肯定要用code完成整个过程了,
(加密 -- 源文件替换 -- 删除.c和其他附属文件)
dirPath = "origin.py"
filePath3 = "build/" # 1、文件加密
setup(ext_modules = cythonize([dirPath]))
print("加密完成") # 2、将加密的文件移至对应目录下
files_1 = os.listdir(filePath3) for files_1_temp in files_1:
if "lib" in files_1_temp:
files_1 = files_1_temp
print(files_1) files_2 = os.listdir(filePath3 + files_1)[0]
so_file = filePath3 + files_1+"/" + files_2
print(so_file) # 文件移动或拷贝
shutil.copy(so_file, "./") # 3、删除原文件和生成的附属文件夹
files2 = os.listdir("./")
for file in files2:
if file == dirPath or file.endswith(".c"):
# 判断文件是否存在
if (os.path.exists(file)):
os.remove(file)
print('移除后test 目录下有文件:%s' % file)
else:
print("要删除的文件不存在!") #删除附属文件夹
try:
shutil.rmtree(filePath3)
except Exception as ex:
print("错误信息:"+str(ex))#提示:错误信息,目录不是空的 print("删除完成")
进入项目下,执行加密文件setup.py: python3 setup.py build_ext
通过 Jenkins + Docker 部署的,那么就要在部署过程中进行加密处理
那么通过Docker部署需要注意点:
1、需要安装python3-dev,gcc,Cython
2、要先安装Cython, 才能执行加密代码
# 从拉取基础镜像 作为builder
FROM registry.cn-hangzhou.aliyuncs.com/ai_images/server-base2 AS builder COPY . /app
WORKDIR /app
RUN rm -rf ./.git # 注意这里也有builder 会大大减少镜像的大小且项目启动速度也会加快
FROM registry.cn-hangzhou.aliyuncs.com/ai_images/server-base2
COPY --from=builder /app/ /app RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone EXPOSE 5009
RUN pip3 install -r ./requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 执行加密文件
RUN python3 setup.py build_ext
CMD ["python3", "/app/main.py","run-server"]
小技巧分享:
docker部署时通过二次镜像处理,会大大的减少镜像的大小且加快项目启动
别再裸奔了,你的项目代码安全吗,再不加密就out了的更多相关文章
- 记一次MongoDB裸奔
导言 大意失荆州,裸奔的 MongoDB 被黑了.虽然并不是什么非常重要的数据,但也给自己敲响的一个警钟.虽然我们平时不容易接触到数据安全,但我们在开发,部署项目的时候,一定要养成良好的安全意识. 根 ...
- 裸奔着造房子——对政府禁止采购Win8系统的一些看法
前段时间有消息称政府招标的项目将禁止使用Win8系统,原因是Win8系统的安全架构将有利于暴露敏感信息给微软,而微软的老子是美利坚,老子想要知道什么,儿子当然不敢不从.因此Win8也被打入冷宫,微软多 ...
- 跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)
前言 撸码需谨慎,裸奔有风险.经常在一些技术交流群中了解到,还有很多小伙伴的项目中Api接口没有做任何安全机制验证,直接就裸奔了,对于一些临时项目或是个人小项目还好,其余的话,建议小伙伴们酌情考虑都加 ...
- S3C6410裸奔之旅——RVDS2.2编译、仿真、调试过程 LED流水灯---转的
S3C6410裸奔之旅——RVDS2.2编译.仿真.调试过程 LED流水灯 (2012-10-13 23:56:30) 转载▼ 标签: s3c6410裸奔 ok6410 rvds2.2 rvds2.2 ...
- 网骗欺诈?网络裸奔?都是因为 HTTP?
先跟大家讲个故事,我初恋是在初中时谈的,我的后桌的后桌.那个时候没有手机这类的沟通工具,上课交流有三宝,脚踢屁股.笔戳后背以及传纸条,当然我只能是那个屁股和后背,还不是能让初恋踢到的后背. 但是说实话 ...
- 裸奔的智能插座:博联Broadlink SP2/SP mini的分析、破解
https://www.jianshu.com/p/028b10bc3dd1 智能设备的联动通常采用IFTTT的方式,但这种方式受限于官方软件提供的功能.想要自主地灵活控制,需要有官方SDK,或知道协 ...
- (转)裸奔的后果!一次ssh被篡改的入侵事件
裸奔的后果!一次ssh被篡改的入侵事件 原文:http://blog.51cto.com/phenixikki/1546669 通常服务器安全问题在规模较小的公司常常被忽略,没有负责安全的专员,尤其是 ...
- 裸奔的支付X聊天,你还敢用吗?
- 语音消息 使用HTTP明文传输,没有任何加密措施,使用域名为up-mayi.django.t.taobao.com,从报文中可以看出,语音消息是以文件形式在网络中传输的,下图为一次语音的发送传输过 ...
- PJzhang:如何在裸奔的年代找到一些遮羞布
猫宁!!! 很久以前的一篇,搬过来. 我一直在“裸奔”,而且很久了,只是不太愿意承认. 想起了“皇帝的新装”,好奇何种经历和灵感让安徒生写出了如此精彩的故事. 一次百度了一个商品,不久接到了大规模电话 ...
随机推荐
- ubuntu之路——day9.1 深度学习超参数的调优
参数重要性: 第一阶:α即learning rate 第二阶:momentum中的β,hidden units的数量,mini-batch的大小 第三阶:hidden layers的数量,learni ...
- 2019-暑假作业-Java语言程序设计
本文于2017年创建,最后更新2019-07-16 任务列表 1.学会使用Markdown做笔记 本篇随笔就是使用的Markdown语法.养成做笔记的习惯! 参考资料: 极简MarkDown排版介绍( ...
- JWT Claims
JWT Claims “iss” (issuer) 发行人 “sub” (subject) 主题 “aud” (audience) 接收方 用户 “exp” (expiration time) 到 ...
- MQTT教學(一):認識MQTT
http://swf.com.tw/?p=1002 本系列文章旨在補充<超圖解物聯網IoT實作入門>,採用Arduino.ESP8266和Node.js實作MQTT物聯網通訊實驗. MQT ...
- Linux记录-shell自动化批量部署sql脚本并记录日志信息(转载)
#!/bin/bash #script_version=v110 db_host=127.0.0.1 db_port=3306 db_username=db_test_inst db_passwd=` ...
- Django Model 定义语法
简单用法 from django.db import models class Person(models.Model): first_name = models.CharField(max_leng ...
- 无法嵌入互操作类型"NationalInstruments.TestStand.Interop.UI.ExecutionViewOptions"。请改用适用的接口
参考一下文章说明, 修改Interop.UI动态库的引入属性为 False,不再报错: VS2010,VS2012,VS2013中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法 在VS2 ...
- iOS扩大按钮的点击范围
// 重写此方法将按钮的点击范围扩大 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { CGRect bounds = s ...
- @PathVariable设置为空的问题(required=false)
参考了:http://www.imooc.com/qadetail/268268 最近学习springMVC的时候,学到@PathVariable后,发现@PathVariable有个required ...
- [转]如何更换 Ubuntu 18.04 LTS 的 GDM 登录界面背景
链接地址:https://www.linuxprobe.com/ubuntu-gdm-login.html