广东快乐10分预测

当前位置:广东快乐10分预测 > 广东快乐10分预测 > RESTframework简介广东快乐10分预测

RESTframework简介广东快乐10分预测

来源:http://www.btxygg.com 作者:广东快乐10分预测 时间:2019-11-08 13:38

全球第三大属性管理系统Drupal修补一重大安全漏洞,该漏洞允许远端黑客执行任意程序并取得Drupal网站的控制权。

截至目前,官方已发布安全补丁修复该漏洞,专家建议网站管理员尽快更新以保护网站。其中运行Drupal版本8.7的网站需要升级到版本8.7.1,运行8.6或更早版本的网站需要更新到版本8.6.16,运行版本7的网站需要升级到版本7.67,而Joomla需要升级到版本3.9.6。

增加数据(post提交后面要加/)

广东快乐10分预测 1

但只有在某些特定的配置下才会形成漏洞,包括在Drupal 8上启用RESTful Web服务模组,同时允许PATCH或POST请求;或者是启用了其它Web服务模组,像是在Drupal 8上启用JSON:API,或是在Drupal 7上启用Services或RESTful。

广东快乐10分预测 2

删除数据

广东快乐10分预测 3

广东快乐10分预测 4

若要立即缓解该漏洞则可关闭所有的Web服务模组,或是变更Web服务器配置,禁止以PUT/PATCH/POST请求Web服务资源。

广东快乐10分预测 5

什么是RESTful?

RESTful是一种开发理念,REST是Roy Thomas Fileding在他博文提出的.REST特点;url简洁,将参数通过url传递到服务器,简单就是说URL定位资源,用HTTP动词描述操作.

Drupal已修补了相关漏洞,建议Drupal 8.6.x用户升级到Drupal 8.6.10,8.5.x用户升级到Drupal 8.5.11,而虽然8.5.x以前的Drupal 8版本也受到该漏洞的影响,但因其产品寿命周期已经结束,已无更新程式可用。

此外,黑客还可能会开发针对该漏洞的自动化攻击程序,植入后门程序进一步释放矿工程序或DDoS僵尸木马等恶意软件,影响网站正常运行。

常见的HTTP的动词

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
  • DELETE(DELETE):从服务器删除资源。

广东快乐10分预测 6

图片来源于创客贴

获取单个数据

广东快乐10分预测 7

根据WebsiteSetup在去年12月的统计,全球约有16.5亿个网站,当中有一半采用属性管理系统进行建置,在CMS市场上,市占率最高的是WordPress,占了60%,居次的是Joomla的6.6%,Drupal则以4.6%名列第三,意味着约有3,700万个网站采用Drupal。

Drupal官方发布漏洞公告称,通过构造含有恶意代码的Phar文件,黑客可绕过Drupal core7.x、8.x版本PHP组件中针对反序列化保护的拦截器,远程执行恶意代码,影响业务系统安全。

视图函数代码

class GamesAPIView(View):
    """
    查询所有的游戏
    """

    def get(self, request):
        games = GameInfo.objects.all()
        game_list = []
        for game in games:
            game_list.append({
                'id': game.id,
                'gtitle': game.gtitle,
                'game_date': game.game_date,
                'game_download': game.game_download,
                'gcommnet': game.gcommnet,
                'image': game.image.url if game.image else ''
            })
            # 要命令序列化就需要把safe设置成False
        return JsonResponse(game_list, safe=False)

    def post(self, request):
        """
        新增游戏
        :param request:
        :return:
        """

        body_data = request.body
        data_str = body_data.decode()
        game_dict = json.loads(data_str)

        game = GameInfo.objects.create(
            gtitle=game_dict['gtitle'],
            game_date= game_dict['game_date'],

        )

        return JsonResponse({
            'id': game.id,
            'gtitle': game.gtitle,
            'game_date': game.game_date,
            'game_download': game.game_download,
            'gcommnet': game.gcommnet,
            'image': game.image.url if game.image else ''
        }, status=201)


class GameAPIView(View):
    def get(self, request, id):
        """
        获取单个游戏的信息
        :param request:
        :param pk:
        :return:
        """

        try:
            game = GameInfo.objects.get(id=id)
        except GameInfo.DoesNotExist:
            return HttpResponse(status=404)
        print(game)
        return JsonResponse({
            'id': game.id,
            'gtitle': game.gtitle,
            'game_date': game.game_date,
            'game_download': game.game_download,
            'gcommnet': game.gcommnet,
            'image': game.image.url if game.image else ''
        })

    def put(self, request, id):
        """
        修改游戏信息
        :param request:
        :param pk:
        :return:
        """
        try:
            game = GameInfo.objects.get(id=id)
        except GameInfo.DoesNotExist:
            return HttpResponse(status=404)

        body_data = request.body
        data_str = body_data.decode()
        game_dict = json.loads(data_str)

        game.gtitle = game_dict['gtitle']
        game.game_date = game_dict['game_date']
        game.save()
        return JsonResponse({
            'id': game.id,
            'gtitle': game.gtitle,
            'game_date': game.game_date,
            'game_download': game.game_download,
            'gcommnet': game.gcommnet,
            'image': game.image.url if game.image else ''
        })

    def delete(self, request, pk):
        """
        删除游戏
        :param request:
        :param pk:
        :return:
        """
        try:
            game = GameInfo.objects.get(id=id)
        except GameInfo.DoesNotExist:
            return HttpResponse(status=404)

        game.delete()

        return HttpResponse(status=204)

Drupal则说明,此一编号为CVE-2019-6340的安全漏洞,肇因于某些类型的栏位无法适当地处理非表格来源的资料,在某些情况下将允许黑客自远端执行PHP程序,因而将它列为高度重大(highly critical)漏洞。

据悉,该漏洞由研究人员Daniel Le Gall发现,被命名为Drupalgeddon,编号CVE-2019-11831,允许黑客使用恶意phar归档替换网站的合法归档文件。Drupal开发人员将其标记为中等危险级别,低于近期Drupal漏洞和早期远程代码执行漏洞的高危评级。

过滤信息

?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件

广东快乐10分预测 8

 

 

图片来源于pixabay

序列化:

把将一种对象的状态信息装换成可以存储或者可以传输形式的过程,比如将模型类转换成JSON数据,整个过程将序列化(序列化和反序列化执行的过程相似的,也就是可以封装代码)

  • 课程介绍
  • 1. 引入DjangoRESTframework
    • 1.1. Web应用模式
    • 1.2. 认识RESTful
    • 1.3. RESTful设计方法
    • 1.4. 使用Django开发REST接口
    • 1.5. 明确REST接口开发的核心任务
    • 1.6. DjangoRESTframework简介
  • 2. DRF工程搭建
    • 2.1. 环境安装与配置
    • 2.2. 见识DRF的魅力
  • 3. Serializer序列化器
    • 3.1. 定义Serializer
    • 3.2. 序列化使用
    • 3.3. 反序列化使用
    • 3.4. 模型类序列化器ModelSerializer
  • 4. 视图
    • 4.1. Request与Response
    • 4.2. 视图概览
    • 4.3. 视图说明
    • 4.4. 视图集ViewSet
    • 4.5. 路由Router
  • 5. 其他功能
    • 5.1. 认证
    • 5.2. 权限
    • 5.3. 限流
    • 5.4. 过滤
    • 5.5. 排序
    • 5.6. 分页
    • 5.7. 版本
    • 5.8. 异常处理
    • 5.9. 自动生成接口文档
    • Published with GitBook

 

 

图片来源于pixabay

 

据外媒报道,研究人员发现,CMS制造商Typo3开发的开源PHP组件PharStreamWrapper存在安全漏洞,运行Drupal、Joomla或Typo3内容管理系统的网站均受影响。

修改数据

广东快乐10分预测 9

 一个简单的REST接口案例

# 路由
urlpatterns = [
    url(r'^games/$', views.GamesAPIView.as_view()),
    url(r'^games/(?P<id>d )/$', views.GameAPIView.as_view())
]

不常用的HTTP动词

  • PATCH(UPDATE):在服务器更新(更新)资源(客户端提供改变的属性)。
  • HEAD:获取资源的元数据。
  • OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

返回处理

  • GET /collection:返回资源对象的列表(数组)
  • GET /collection/resource:返回单个资源对象
  • POST /collection:返回新生成的资源对象
  • PUT /collection/resource:返回完整的资源对象
  • PATCH /collection/resource:返回完整的资源对象
  • DELETE /collection/resource:返回一个空文档

超媒体(Hypermedia API)

github(api.github.com)

广东快乐10分预测 10

访问第一个

广东快乐10分预测 11

 

查询所有数据

广东快乐10分预测 12

REST接口的核心

1.将数据转换成模型类的对象(将前端的数据,反序列化为模型类对象,保存到数据库中)

2.将模型类的对象转换为响应的数据

3.操作数据库(将数据库数据序列化为前端需要的格式)

RESTful架构:

  • 每一个URL代表一种资源;
  • 客户端和服务器之间,传递这种资源的某种表现层;
  • 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
  • URL节后不能含有动词
  • 一般接口返回的是JSON和XML类型的,JSON一般用的多
  • 定义接口统一,使用起来比较方便

Django开发REST接口

RESTful设计方法:

API接口应该部署到专用的域名下,如果API不需要扩展,可以放到主域名下,API版本号放到URL中或者放到请求头信息中,路径就是表示API的具体网站,每个网站都有对应的资源,API中的名词应该使用复数,

常见的状态码

  • 200 OK - [GET]:服务器成功返回用户请求的数据
  • 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
  • 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
  • 204 NO CONTENT - [DELETE]:用户删除数据成功。
  • 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作
  • 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
  • 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
  • 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
  • 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
  • 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
  • 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
  • 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

本文由广东快乐10分预测发布于广东快乐10分预测,转载请注明出处:RESTframework简介广东快乐10分预测

关键词: 开源 漏洞 多个 远端 程式