한눈에 보기: 워드프레스 개발은 기능 구현만큼 보안이 중요합니다. 입력값 정화와 출력 이스케이프, Nonce와 권한 체크, SQL Injection·XSS 방어는 기본 루틴으로 자리잡아야 합니다. 이 글에서는 워드프레스 PHP 개발자가 반드시 알아야 할 보안 핵심기를 정리했습니다.
1. 입력 정화·출력 이스케이프
사용자가 입력한 값은 절대 그대로 저장·출력하면 안 됩니다. 워드프레스는 다양한 정화(sanitize)와 이스케이프(escape) 함수를 제공합니다.
- 입력 정화 (Sanitize): 데이터베이스에 저장하기 전에 형식을 정리합니다.
sanitize_text_field()
: 일반 텍스트sanitize_email()
: 이메일 주소esc_url_raw()
: URL
- 출력 이스케이프 (Escape): 화면에 표시하기 전에 HTML 특수문자를 변환해 공격을 막습니다.
esc_html()
: 본문에 출력할 때esc_attr()
: 속성 값에 출력할 때esc_url()
: 링크 출력 시
예: echo esc_html( sanitize_text_field( $_POST['title'] ) );
핵심 요약: 저장 전에는 sanitize, 출력 전에는 escape라는 흐름을 습관처럼 사용하세요.
2. 인증·권한
보안 사고의 상당수는 권한 체크 누락에서 발생합니다. 관리자만 접근해야 할 기능은 반드시 Nonce와 권한을 확인해야 합니다.
- Nonce: 요청 위조(CSRF)를 방지하는 일회성 토큰입니다.
wp_nonce_field('my_action')
→ 폼에 숨김 필드 생성wp_verify_nonce($_POST['nonce'], 'my_action')
→ 서버에서 검증
- 권한 체크:
current_user_can()
으로 사용자 권한을 확인합니다.- 예:
current_user_can('manage_options')
→ 관리자 전용 - 예:
current_user_can('edit_posts')
→ 일반 편집 권한
- 예:
Nonce와 권한은 항상 함께 사용해야 합니다. Nonce는 요청 위조 방지, 권한은 접근 제어를 담당합니다.
핵심 요약: Nonce와 권한 체크를 동시에 걸어야 안전한 보안 루틴이 완성됩니다.
3. 체크리스트
보안은 습관화된 루틴이 필요합니다. 워드프레스 개발자가 기본적으로 지켜야 할 체크리스트는 다음과 같습니다.
- SQL Injection 방지:
$wpdb->prepare()
반드시 사용 - XSS 방지: 출력 전
esc_*()
적용 - Nonce 검증: 모든 POST·AJAX 요청에
wp_verify_nonce()
- 권한 확인:
current_user_can()
으로 역할 제한 - 파일 업로드:
wp_handle_upload()
사용, 확장자 검증 - 버전 관리: PHP·워드프레스·플러그인은 항상 최신 버전 유지
핵심 요약: 보안 체크리스트를 개발 초기부터 코드에 포함해야 나중에 보안 취약점으로 이어지지 않습니다.
FAQ
- Q. Nonce는 로그인하지 않은 사용자도 쓸 수 있나요? 기본적으로 로그인 세션과 연결됩니다. 로그인하지 않은 경우에는 별도 토큰·인증 설계가 필요합니다.
- Q. sanitize와 escape를 동시에 써야 하나요? 네, 입력 시 sanitize, 출력 시 escape를 각각 적용해야 합니다. 하나만 해서는 불완전합니다.
- Q. 권한은 롤(role)과 어떻게 연결되나요? 워드프레스는 권한(capability)을 기반으로 합니다. 역할(role)은 권한(capability)의 집합입니다.
- Q. $wpdb로 직접 쿼리를 쓰면 항상 위험한가요? prepare()를 사용하면 안전합니다. 하지만 가능하다면 WP_Query 같은 추상화 계층을 권장합니다.
- Q. AJAX 보안에서 가장 흔한 실수는? Nonce 검증을 생략하거나, current_user_can()을 빼먹는 경우가 많습니다.
- Q. 파일 업로드 보안에서 추가로 필요한 건? 확장자 화이트리스트, 이미지 검증, 업로드 디렉토리 분리 등을 적용해야 합니다.
출처
👉 다음 단계 학습 가이드
- 성능: 보안 다음 단계는 「캐싱과 성능 최적화: Object Cache·CDN·크리티컬 CSS」에서 이어갑니다.
- 운영 효율: 서버 관리 자동화는 「WP-CLI 활용법: 서버에서 빠르게 관리하기」를 참고하세요.