mylamour / blog

Your internal mediocrity is the moment when you lost the faith of being excellent. Just do it.
https://fz.cool
61 stars 14 forks source link

Python: 执行系统命令与安全编码 #39

Open mylamour opened 6 years ago

mylamour commented 6 years ago

因为参与到SDLChina的文档编写,恰好公司内的编程语言采用的是Python,故整理之。此文亦可在sdlchina官网看见。

python语言安全

本身要注意的有,一些危险函数,危险模块的调用,主要是系统调用。这个如果调用一定要对输入输出做好过滤,以下是代码中各种导致进行系统调用的方式。尽量避免。

type 1: keywords

  1. exec('import os ;os.system("ls")')
  2. eval('__import__("os").system("ls")')
  3. f'''{__import__('os').system('ls')}'''
  4. [].__class__.__mro__[-1].__subclasses__()
  5. _builtin__.open('/etc/passwd')
  6. system('ls')
  7. [].__class__.__base__.__subclasses__()[59]()._module.linecache.__dict__['o'+'s'].__dict__['sy'+'stem']('l'+'s') # only python2
  8. [].__class__.__base__.__subclasses__()[59](linecache.getlines, '/etc/password')
  9. [].__class__.__base__.__subclasses__()[59](exec, '("__import__("os").system("ls")")')

type 2: python lib

  1. subprocess.Popen('ls')
  2. os.popen('ls')
  3. importlib
  4. builtins.open('/etc/passwd')
  5. linecache.getlines('/etc/passwd')

type 3: python import

  1. __import
  2. import
  3. importlib

type 4: other

  1. import sys
    sys.modules['NB']='/Users/mour/anaconda3/lib/python3.6/os.py'
    import NB
  2. base64 deocde encode
  3. pickle

Web编程

对应Web编程中安全概念在python web框架中的实现。url跳转,目录遍历,任意文件读取也需要考虑在内。针对不同的框架也需要。

Flask 安全

Django 安全

可参考phithon的博客,有较多相关资料。

审计工具

安装使用方式较为简单,所以不做介绍。

引用