보안
Python 인젝션
warpmemory
2016. 8. 10. 14:48
1. Command Injection
1.1. subprocess.call() function
- subprocess.call(), shell=True 인 경우에 해당
- shell=False 처리하고, 커멘드 라인 shlex.split() 처리
1.2. os.system() or os.popen*() function
- os.system(), os.popen*() 경우에 해당
- pipes.quote()를 사용하여, 변수(명령어 아규먼트), quote 처리한다.
2. Code Injection
2.1. exec() or eval() function
- 위험성이 많기 때문에 가능하면 사용하지 않는게 좋다.
- 사용해야 한다면, 받드시 들어올 수 있는 변수값을 체크 해야한다.
2.2. pickle or shelve module
- Celery, Django 낮은 버전에서 메시지 전송시, 세션저장시 각각 pickle을 사용하기 때문에 보안 처리 해야한다.
- 데이터 시리얼라이즈 시 json 또는 yaml(반드시 yaml.safe_load()를 사용)을 사용하도록 한다.
2.3. yaml
- yml 설정 파일 인젝션이 가능
- yaml.load() 대신, yaml.safe_load() 사용 해야한다.
3. SQL Injection
- 문제는 믿지 못할 변수 이기때문에, Django or sqlalchemy 같은 ORM을 사용하는 것을 추천한다.
4. Information Leakage
- print, logging 등을 사용할 때에는, 프로세스 및 로그 파일 등의 소유권 및 권한 설정을 한다.