本发明涉及人机交互技术领域,具体为一种利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法。

背景技术:

编程是人与计算机交互最直接与高效的方式,由于其专业性与敏感性,一般产品不会提供该交互方式。但在一些允许用户高度自定义的场景,仍然需要提供可编程交互接口供用户使用。可编程交互接口一般需要支持以下功能:

词法/语法分析:根据接口定义分析用户输入,生成关键词token与AST。此功能必须充分考虑开放的接口与认可的关键词是否存在执行风险,避免最终代码在本地执行时被不法份子利用。

代码生成:进行语义分析,代码优化等工作,最终生成本地可执行代码。

代码执行:将生成的最终代码在服务器本地执行并将执行结果按定义的规则反馈给用户。最终用户收到的反馈可能是渲染好的界面,或完全受其输入指令控制的AI等。

该技术已广泛应用与Web2.0社交网站与游戏中(AI宏等)。而如何在保证接口易用的同时,有效的防止恶意代码入侵,是该技术的主要难点。

现有的操作是,设计一套DSL,提供有限的编程语言接口,保障运行时的安全性。分析用户输入的程序,转译为本地可执行程序并执行,输出结果。但是,DSL设计与开发成本高,运行效率较低。用户使用门槛高,使用前需学习该DSL的语法。一旦设计者经验不足或发生疏漏,就会产生漏洞为恶意代码侵入提供可能性。

或者用户直接输入熟悉的GPL代码,本地运行时利用虚拟机进行隔离,既是被侵入,也仅影响虚拟机内部环境。虚拟机执行完毕,输出结果后,立刻销毁。但是虚拟机启停资源消耗很高,运行效率很低,采用此方案会带来高昂的成本。

术语解释:

Python:是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。

用户编程接口:用户编写代码并执行返回结果的交互接口。

AST:抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。

Web2.0:Web2.0 是相对于Web1.0 的新的时代。指的是一个利用Web的平台,由用户主导而生成的内容互联网产品模式,为了区别传统由网站雇员主导生成的内容而定义为第二代互联网,web2.0是一个新的时代。

DSL:DSL的全称是domain-specific language,指的是针对特定应用领域而设计使用的计算机语言。

GPL:跨领域通用计算机语言。如Java, Python等。

AI:人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。

PyPy:PyPy是用Python实现的Python解释器。

沙箱:是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。其为一个独立的虚拟环境,可用以测试不受信任的应用程序或上网行为。

技术实现要素:

本发明的目的在于提供一种效率更高,安全可靠,且成本较低,方便易用的利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法。技术方案如下:

一种利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法,包括以下步骤:

步骤1:在Web前端或APP客户端提供一个支持Python语法的编程编辑器,作为应用层Python编程交互界面;

步骤2:将用户编写好的代码发送到可解释执行Python代码的服务器上;

步骤3:将用户上传的代码在PyPy沙箱模式中运行,并获取输出结果;

步骤4:将结果返回到应用层,响应给用户。

进一步的,所述步骤2中户编写好的代码通过HTTP/TCP通信协议来发送。

本发明的有益效果是:

1) 本发明的方法与虚拟机方案相比,由于PyPy沙箱是以进程的形式执行,执行效率和源生Python程序效率一致,执行效率比需要启动和销毁虚拟机环境的虚拟机方案高;

2) 本发明的方法与DSL方案相比,沙箱环境保证了必要的运行时隔离,不会对执行程序的服务器或服务器上的其他程序造成任何实质性改动,规避了因设计与程序漏洞导致的代码入侵与渗透风险;

3) 本发明的方法与DSL方案相比,由于减少了设计与实现DSL的过程,因此实施成本比DSL更低;

4) 本发明的方法与DSL方案相比,由于使用通用的Python语法,用户使用门槛低,文档丰富,功能强大。

具体实施方式

下面对对本发明的方案做进一步详细说明。 本实施的方法使用沙箱模式提供用户编程接口,保证程序运行环境与系统应用层,内核层完全隔离,保障服务器环境安全稳定。 该方案比传统的虚拟机方案和最近流行的docker方案都更轻量,更快速。 能在单机上实现大量编程接口。具体过程如下:

一种利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法,包括以下步骤:

步骤1:在Web前端或APP客户端提供一个支持Python语法的编程编辑器,作为应用层Python编程交互界面。

步骤2:将用户编写好的代码发送到可解释执行Python代码的服务器上。

步骤3:将用户上传的代码在PyPy沙箱模式中运行,并获取输出结果。

用户提交的代码通过接口进入沙箱运行环境,在沙箱中运行并返回结果到前端,前端展示给用户或调用其他接口实际写入数据到服务器;其他写数据的接口不可在沙箱中,否则数据会写入失败。仅用户代码运行环境包裹在沙箱中,由于沙箱运行环境的约束,这些操作都仅在沙箱内模拟进行,并未实际在服务器上生效,而用户最终需要的反馈,仅为执行结果。

步骤4:将结果返回到应用层,响应给用户。

展示给用户的效果可能是根据他的代码实现的智能AI,或智能指令控制的角色,可根据环境输入做判断,智能做出响应的游戏角色,单位,机器人等。

Python通用语言特性:使用Python语言作为编程接口可省掉设计DSL的成本。Python语言易读易用,且有大量专业文档,上手容易。Python语言拥有大量的使用者,在所有通用语言普及度中,Python仅次于Java, C与C++排名第四。使用Python语言作为编程接口可降低用户学习成本,熟练的Python用户可直接进行编程作业。

PyPy沙箱对运行时环境进行隔离:PyPy的沙箱模式能提供独立隔离的运行时环境,保证允许结果不会影响服务器操作系统与其他应用程序的执行。利用此特性,能以极低的成本解决用户提交的代码在执行时的安全问题。有效的防止用户代码入侵服务器或其他进程的风险。

python如何实现接口安全_利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法与流程...相关推荐

  1. vue后端必须接口吗_前后端分离模式,后端说开发完才能给接口文档,合理吗

    背景: 汇总了下老王在其他平台的原创回复,欢迎关注老王原创公众号[软件老王],关注不迷路. 一.后端开发完接口才给出接口文档,合理吗? 本人所在的项目组做项目过程中,后端不会先给出接口文档,而是要等他 ...

  2. python 调用linux内核api_Linux系统调用及用户编程接口(API)学习

    Linux系统学习 系统调用指操作系统提供给用户程序调用的一组"特殊"接口,用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务. 为什么用户程序不能直 ...

  3. Linux系统调用及用户编程接口(API)学习

    Linux系统调用 系统调用指操作系统提供给用户程序调用的一组"特殊"接口,用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务. 为什么用户程序不能直 ...

  4. python模仿百度云桌面_利用百度云接口实现车牌识别!人称Python调包侠!

    一个小需求---实现车牌识别. 目前有两个想法 1. 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 2. 自己实现车牌识别算法(复杂) 一开 ...

  5. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

  6. python模拟登录抖音_利用 mitmproxy 实现抖音 Cookie,设备 ID 获取 (一)

    先讲解一下思路,是利用mitmproxy代理https协议,从而判定抖音个人信息接口,在个人信息接口的返回体接收时将用户信息数据,以及Header头(主要是Cookie),Query体(包含设备ID) ...

  7. python连接linux堡垒机_利用Python Paramiko开发linux堡垒机

    1.Paramiko模块下的demo.py程序 前面利用Python中的Paramiko模块可以进行SSH的连接,以及用来传送文件(SFTP),但是无论是哪一种方式,连接都是短暂的,并非是长连的,即一 ...

  8. 群晖python套件包_利用群晖Docker安装ubuntu16.04搭建python网站服务器(部署篇)

    在帖子<利用群晖Docker安装ubuntu16.04搭建python网站服务器(安装篇)(地址:http://www.cirdown.com:81/thread-185-1-1.html)&g ...

  9. python django开发工具_利用pyCharm编辑器创建Django项目开发环境-python开发工具第一篇...

    [前置说明] 1.django环境与python对应关系: Django version Python versions 1.11 2.7, 3.4, 3.5, 3.6, 3.7 (added in ...

最新文章

  1. 交换机SPAN功能配置
  2. DEV柱状图----傻瓜版
  3. android 动画多次使用,IOS使用animation引用同一个动画多次没反应,安卓可以
  4. 剔除服务器返回的NSNull格式的数据
  5. 3月面经汇总-字节跳动,美团,腾讯算法岗
  6. Atitit.eclipse comment  template注释模板
  7. (转)江南愤青丨丨监管办法之后,网贷一地鸡毛(2016年)
  8. CCF-CSP/202206-2—寻宝!大冒险!c++解题思路
  9. 一看就会的侧方位停车技巧 见了就收了吧
  10. python-字符串容器
  11. html5圆圈闪烁,html5 css3圆形波浪百分比加载动画特效
  12. python 添加半透明水印_如何利用python给图片添加半透明水印
  13. C的函数 gotoxy()
  14. 优秀免费资源300+
  15. 58同城笔试:后端开发编程题
  16. unity|加载AB包|有依赖关系的AB包
  17. STS lesson one : p
  18. kaios好用吗_kaios系统有微信吗
  19. 反向代理OWA(Office Online Server/Office Web Apps Server)使用8080或其他除默认80以外端口的解决方法
  20. mongodb课程介绍

热门文章

  1. JDK(Install)
  2. 11月22日云栖精选夜读 | 送你一份Spring Boot 知识清单
  3. 消费分期群体-在校大学生和职场白领
  4. docker运行storm及wordcount实例
  5. Swift 4 和 Objective-C 在同一个工程里的混搭编程的方法
  6. 使用grafana4的alert功能
  7. 转:Java NIO系列教程(一)Java NIO 概述
  8. Hbuilder--让手爽,飞一般的编码(二)
  9. 嵌入式软件架构设计之分层设计
  10. HTML5的革新:结构之美