KWONKYU

PHP 시큐어 코딩 #8

May 15th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. #1.php.ini 옵션 설정
  2. allow_url_fopen: 원격 리소스를 로컬 파일처럼 참조할 수 있게 해줌. include, require 등과 같이 사용 시 위험하며 필요하지 않다면 꺼 놓을 것.
  3. disable_functions: 위험한 함수들을 사용 제한한다. 개발자의 가이드라인보다 PHP의 강제성에 더 무게를 두는 옵션.
  4. display_errors: 오류 출력. 하지만 공격자가 이를 보고 추측할 수 있으므로 운용 중인 서비스에서는 꺼 놓을 것.
  5. enable_dl: PHP Extension을 runtime에 로딩하는 dl() 함수의 사용 여부를 결정. 애플리케이션에서 사용하지 않는다면 꺼 놓을 것.
  6. error_reporting: E_ALL이나 E_ALL | E_STRICT로 설정하여 PHP가 잘못된 내용을 알려줄 수 있도록 하자.
  7. file_uploads: 파일 업로드 자체를 끌 수도 있다. 애플리케이션에서 사용하지 않는다면 꺼 놓을 것.
  8. log_errors: 이것이 활성화되어 있으면 error_log 지시문에서 지정한 파일에 모든 오류를 기록한다. 이는 사용자 행위에 대한 히스토리를 생성하는데 유용.
  9. magic_quotes_gpc: SQL Injection을 막기 위해 입력을 모두 이스케이프한다. 데이터베이스 고유의 이스케이프함수는 사용할 수 없으며 필터링 규칙과 겹칠 경우 불필요한 복원이 필요해지므로 꺼 두는 것이 좋다.
  10. memory_limit: PHP를 --enable-memory-limit 옵션과 함께 컴파일했을 때만 사용되긴 하는데 이는 엉터리 스크립트로 인해 메모리가 낭비되는 것을 막는다. 최대 메모리를 제한할 수 있다.
  11. open_basedir: PHP가 특정 디렉터리에서만 파일을 열 수 있도록 한다. include, require 등 시스템 함수의 공격의 성공 가능성을 낮출수 있다. 경로 마지막에 슬래시(/)를 붙여야 디렉터리로 지정이 되며 enable_dl 옵션이 해제되어 있어야 우회하는 것을 막을 수 있다.
  12. register_globals: 전역 변수 문제.
  13. safe_mode: 이전에 언급한 문제.
  14.  
  15. #2.관심을 기울일 필요가 있는 함수들
  16. eval(): 문자열을 PHP코드로 평가하기 위해 사용. 즉 문자열 그대로 소스코드에 박아넣은 듯한 효과를 볼 수 있다. 물론 오염된 데이터가 사용되면 위험하므로 가능한 한 사용하지 않는 것을 추천.
  17. exec(): 필터링, 이스케이프 된 데이터만 사용할 것.
  18. file(): 파일을 읽어서 열거형 배열로 반환. print_r 로 출력시킬 수 있으며 파일 핸들 관리를 필요로 하지 않기 때문에 편리하다. fopen()이 딱히 좋지 않다는 것은 아니지만 fopen()은 웹 사이트 내용을 비롯한 다양한 리소스들을 읽어들이기 때문에 file() 만 사용하는 것이 상대적으로 안전하다고 할 수 있다. 또한 매개변수(입력 데이터)가 오염되었다면 file()의 결과값도 오염되었다고 판단해야 한다. 로컬 데이터가 아니라 원격 리소스롤 불러올 수도 있기 때문...
  19. file_get_contents(): file() 참고.
  20. fopen(): file() 참고.
  21. read_file(): file() 참고.
  22. include(): require과 마찬가지로 코드 삽입 공격의 위험이 있다.
  23. passthru(): exec() 참고.
  24. popen(): exec() 참고.
  25. proc_open(): exec() 참고.
  26. shell_exec(): exec() 참고.
  27. system(): exec() 참고.
  28. phpinfo(): PHP의 굉장히 많은 정보를 출력하기 때문에 유의할 것.
  29. preg_replace(): 패턴과 일치하는 문자열 치환.
  30.  
  31. #3.암호화
  32. 대칭형 암호, 비대칭형(공개키) 암호, 암호화된 해시 함수(메시지 다이제스트) 등을 참고할 것.
Advertisement
Add Comment
Please, Sign In to add comment