데이터베이스에 들어가기 전에 그리고 브라우저로 출력하기 전에 플러그인 / 테마의 모든 데이터가 안전하게 처리되도록하고 싶습니다. 내 문제는 포스트 메타 필드를 저장할 때와 같이 API가 사용자를 위해 위생 처리를 처리하는 상황과 사용자 정의 설정을 저장할 때와 같이 플러그인 / 테마 작성자가 전적으로 책임을지는 상황이 있다는 것입니다.
이 질문의 범위에서, 나는 도메인 수준에서 데이터의 유효성을 검사하는 것에 대해 걱정하지 않습니다. 예를 들어 폼의 Age 필드가 0에서 120 사이인지 또는 전자 메일 주소가 유효한지 확인합니다. 데이터베이스에 저장할 때 SQL 주입을 피하기 위해 SQL 쿼리를 이스케이프 처리하거나 XSS를 피하기 위해 HTML 템플릿으로 출력되는 데이터를 삭제하는 등 보안에만 관심이 있습니다.
출력 위생, 나는 당신이 항상 같은 기능을 사용할 필요가 있음을 알고 esc_html()
및 esc_attr()
HTML 템플릿에 변수를 echo'ing 때. 그러나 템플릿 태그를 사용하는 경우는 어떻습니까? 그들은 모두 이미 출력을 위생 처리합니까? 그렇다면 어떤 컨텍스트 (일반 HTML, 태그 속성 등)에 대한 것입니까? 일부 함수에는 서로 다른 컨텍스트에 대한 변형이 the_title_attribute()
있지만 (예 : 대부분)
입력 삭제를 위해 $wpdb->prepare()
수동 쿼리를 작성할 때 사용해야 하지만, 설정 API를 사용하여 플러그인 설정 페이지를 만들거나 사용자 정의 게시물 유형에 대한 게시물 메타 필드를 저장하는 경우는 어떻습니까?
지금은 함수를 사용하여 위생 상태인지 여부를 확인할 때마다 Core를 읽고 자습서를 읽었지만 오류가 발생하기 쉽고 시간이 많이 걸립니다. 가능한 모든 상황과 API가 처리하는지 여부에 대한 포괄적 인 목록을 찾고 싶습니다. 예를 들어
API 검증 / 위생
- 로 게시물 메타 저장
update_postmeta()
- 로 사용자 메타 저장
update_user_meta()
- 게시물 제목 출력-상황에 맞는 변형을 사용하십시오.
the_title()
- 기타
수동으로 유효성 검사 / 위생 처리해야합니다
- 설정 API를 사용하여 플러그인 옵션 저장 의 세 번째 매개 변수로 콜백을 전달합니다
register_setting()
. - 직접 데이터베이스 쿼리 :에서 쿼리를 래핑하십시오
$wpdb->prepare()
. - HTML로 변수 출력. 사용
esc_attr()
,esc_html()
등 - 기타
또한 API가 특정 상황에서 API를 제공하는 이유를 이해하지만 다른 상황에서는 이해하지 못합니다. 데이터의 알 수없는 특성과 관련이 있다고 가정하지만 철저한 설명을 듣고 싶습니다.
the_title()
, the_permalink()
등) 당신은 잘하지만 사용자 정의 데이터를 사용하면 (예를하지 않습니다 get_post_meta()
). 의심 스러우면 스스로를 소독하십시오 . 아프지 않습니다.