zoukankan      html  css  js  c++  java
  • python的其他安全隐患

    零、绪论

    python这里以python2.7为研究对象,对应的我们会简要说明一下python3,其他指与反序列化无关的安全隐患问题。

    一、标准输入输出:

    1、首先,我们来看下标准输入输出

     1 import sys
     2 #常用参数:
     3 sys.stdin.read()
     4 sys.stdin.readline()
     5 sys.stdin.readlines()
     6 sys.stdin.write()
     7 sys.stdin.writelines()
     8 sys.stdin.flash()
     9 sys.stdin.close()
    10 sys.stdout.read()
    11 sys.stdout.readline()
    12 sys.stdout.readlines()
    13 sys.stdout.write()
    14 sys.stdout.writelines()
    15 sys.stdout.flash()
    16 sys.stdout.close()

    本质上都是buffer,对于判断否有数据可以使用isatty()

    打印到文件,可以使用sys.stdout=fd

    2、测试一段代码:

    1 import os
    2 print input()

    你输入os.system('id')就会出结果,不信的话可以尝试哦(对于python2.x)。

    你可以查看help(input)

    '''
    Help on built-in function input in module __builtin__:
    
    input(...)
        input([prompt]) -> value
    
        Equivalent to eval(raw_input(prompt)).
    (END)
    '''

    所以使用raw_input 就可以避免这个问题,这也是问啥python2.7推荐使用raw_input的原因,raw_input基本相当于sys.stdin.readline().strip(),也就是去掉了最后的换行符号。

    python3取消了raw_input,input等于python2.7的raw_input

    二、assert代码执行:

    1 assert isinstance(os.system(id),int)

    assert 后面应该是一个判断,本质上是assert true 或者assert false(这种情况会raise AssertError)

    但是咱这个判断里面可以做到代码执行,当然通过代码执行也可以做到命令执行啦。

    所以assert一般只能用于测试,不能再发布版本中使用。

    三、模块注入、导入代码执行、猴子补丁

    1、导入代码执行很简单,就是你在引入的模块中定义执行的代码在import语句中会执行,但不包括if __name__ == "__main__"中的代码。

    2、另外在命令行输入中检查到python -/-c/-m等都会导致当前目录加入sys.path

    3、猴子补丁是指动态修改程序指令

    1 __builtins__.False, __builtins__.True = True, False
    2 shutil.copy.__code__ = (lambda src, dst: dst).__code__
    3 x_obj.__class__ = Y

    以上代码都动态改变了程序的指令结果,尤其是第一行,直接把true和false都反转了,当然在python3后这第一行是无法运行的。

  • 相关阅读:
    如何创建支持Eclipse IDE的Maven项目
    使用Nexus搭建Maven私服
    Maven找不到java编译器的问题
    关于java -version版本问题
    win7右下角声音图标不见的解决方法
    如何用Maven创建一个普通Java项目
    如何手动把jar包添加进Maven本地仓库
    Maven是如何工作的
    Maven远程仓库
    canvas+js实现时钟效果图
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8492410.html
Copyright © 2011-2022 走看看