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