안녕하세요. 린치핀소프트 한광희입니다.

 

워드프레스 플러그인&테마를 개발할때 고려해야 하는 기술적 사항들은 다양합니다. 워드프레스라는 플랫폼이 PHP,MySQL,JS,CSS,HTML 등과 같은 다양한 기술로 구성되었다는 점 뿐만 아니라 워드프레스 그 자체에서도 템플릿 계층구조, DB에 대한 접근, 액션 훅, AJAX, 보안 요소등 다양한 API 또는 함수를 제공하고 있기 때문입니다. 이번 포스트에서는 일반적으로 워드프레스 테마&플러그인 개발할때 고려할 수 있는 요소들을 몇 가지 소개합니다. (개발되는 테마와 플러그인의 종류와 범위에 따라 고려해야하는 사항은 여기서 언급되지 않는 사항으로도 확장될 수 있습니다.

 

 

1.세션 또는 쿠키 체크(로그인 유저 및 로그인 여부 확인)

일반적인 PHP 에서는 session_start() 등을 이용하여 세션을 체크하여 프로그래밍하지만, 워드프레스에서는 현재 로그인하고 있는 이용자의 ID를 확인하거나 현재 접속한 사람이 로그인되어 있는지의 상태를 확인하는 함수가 준비되어 있습니다. 보통 로그인한 회원의 세션을 유지하고 확인하기 위해 체크를 하기 때문에 이때는 워드프레스에서 제공하는 함수를 이용하는 것도 추천할만한 방법입니다.

is_user_logged_in() : 현재 이용자가 로그인하였는지 확인

get_current_user_id() : 현재 로그인한 유저의 ID값을 반환

 

 

2.Form , AJAX 전송시 NONCE 확인( 이중 검증 )

워드프레스에서는 FORM 또는 AJAX 처럼 이용자로부터 정보를 전달받습니다. 이때 악의적인 사용자등에 의해 잘못된 정보를 입력받을 수 있고 현재 정보를 입력하기를 기대하는 대상자가 아닌 다른 악의적이 공격자로부터 데이터 전송이 오는 등의 상황에서 권장 할 수 있는 방법이 Nonce 입니다. Form 등 이용자가 입력해야하는 Form 태그를 구성하여 서버에서 클라이언트로 송신할때 “nonce”라는 식별자를 생성하여 이용자에게 전송하며, 이용자는 Form Data를 전송할때 서버가 초기 전송한 nonce가 맞는지 확인하여 틀리다면 처리하지 않는 방법 등입니다.

워드프레스에서는 보안에 관련된 방법으로 Nonce의 사용을 권장하고 있습니다. 또한 이 Nonce를 이용한 이용자 검증은 단순히 Form 데이터 전송뿐만 아니라 워드프레스 Ajax를 이용한 데이터 전송일때에도 유효합니다. Ajax를 이용할 때에는 워드프레스에서 제공하는 check_ajax_referer() 같은 함수를 이용할 수 있습니다.

 

 

3.wpdb Class 이용시 Prepare 메서드 이용

워드프레스 개발시에 워드프레스 해심 데이터베이스 테이블 또는 플러그인에서 추가한 테이블의 조작을 위해서 wpdb 클래스의 인스턴스를 이용할 때가 있습니다. 이때 만약 SQL 을 query 할때 이용자가 전달한 데이터를 SQL 에 포함해야 한다면 SQL Injection 과 같은 공격에 대해서 검사를 해야 합니다. 워드프레스 데이터베이스 조작 클래스 wpdb 에서는 prepare 라는 메서드를 제공합니다. SQL로 데이터베이스에 질의하기 전에 $wpdb->prepare()함수에서 반환하는 SQL로 query를 질의하면 많은 부분에서 SQL Injection에 대한 대비를 해볼 수 있습니다.

 

 

4.Text Domain 사용

텍스트 도메인 항목은 추후 플러그인이나 테마의 번역등을 염두한다면 개발시에 텍스트 도메인을 이용하여 추후 다국어를 지원하게끔 수정하기가 용이합니다. 텍스트 도메인을 지원하는 _e(), __(), _x() 등의 함수가 워드프레스에서 제공되고 있습니다.

 

 

5.Sanitize / Escape 관련 함수 사용하기

이용자로부터 데이터를 전달받았을때 해당 데이터에 대해서 불필요한 또는 예기치 않은 오작동을 일으키는 특정 문자등을 제거할 필요가 있습니다. 워드프레스에서는 다양한 Sanitize 함수를 제공합니다. UTF-8, “<“,”>”캐릭터 등의 엔티티 변환, 태그의 제거 등등을 수행합니다. Sanitize 함수가 이용자로부터 데이터를 전달받아 DB나 파일같은 시스템에 저장하기 직전에 처리하는 함수라면 Escape 관련함수는 파일 시스템이나 DB에 저장된 데이터를 화면에 출력할때 사용하는 함수입니다. 워드프레스에서는 esc_html() , esc_attr(), esc_sql() 등 처럼 다양한 환경에서 이스케이프(Escape) 함수를 함수를 제공합니다.

 

 

6.Hook 추가

워드프레스 개발에 있어서 워드프레스에서 제공하는 필터 또는 액션 훅(Hook) 요소를 얼마나 잘 활용하고 파악하고 있느냐에 따라 더 빠른 개발과 다양한 수정 및 기능의 구성이 용이해집니다. 이처럼 Hook이란 요소를 통해 워드프레스 개발에 속도를 낼 수 있는 것처럼 자신이 개발한 테마나 플러그인에 Hook을 추가하면 추후 자신이 기능을 추가하거나 보완하는데 도움이 될뿐만 아니라 다른 이용자들에게도 훨씬 수월하게 소스코드를 변경하거나 기능의 전환을 할 수 있는 환경을 구성해 줄 수 있습니다.