# 파일업로드 취약점
- 방법1
원본 파일명을 그대로 저장하지 않고 인코딩하여 저장한다.
md5($filename)
확장자가 없으므로 가장 확실
이미지같은 경우 브라우저에 따라 안보일 수 있음
- 방법2
실행가능한 확장자가 포함이 된 것을 막는다.
주의할 것은 대소문자 주의 및 중간에 포함된 것도 막아야 한다.
$filename = strtolower($filename);
if (preg_match('/\.(php|htm|inc|var|xml)/', $filename)) {
exit;
}
아래와 같은 파일들도 실행될 수 있다는 것을 주의 해야 한다.
aaa.pHP aaa.PhP - 대소문자가 포함되어 있어도 서버에서는 실행이 가능
bbb.phP.var bbb.html.var - 중간에 포함된 경우에도 실행이 가능
ccc.INc ccc.iNc.var - 실행 가능하도록 설정된 기타 확장자
- 방법3
서버단에서 업로드 되는 디렉토리에서 php같은 파일의 실행을 막는다.
SE의 도움 필요
# SQL Injection
참고: http://old.justinshattuck.com/2007/01/18/mysql-injection-cheat-sheet/
http://www.securityplus.or.kr/xe/?document_srl=19841&vid=bangrip1
# XSS
참고: http://ha.ckers.org/xss.html
http://www.securityplus.or.kr/xe/?document_srl=20235&vid=bangrip1
# 기타
- 최소한의 인증(아이디, 비밀번호) 없이 관리 페이지를 열어두어서는 안된다.
- 외부 노출되는 관리페이지의 아이디, 비밀번호는 간단한 것으로 하지 않는다.
- 마스터와 같이 자체 서비스 관리 페이지는 내부에서만 접근할 수 있도록 막는다.
- 개발용 페이지들이 실서버에 업로드 되지 않도록 한다.
- 개인 용도로 관리 권한이 있는 페이지를 만들지 않는다.
- 오픈전 테스트용 아이디는 모두 정리한다.