찾아야 할 일반적인 보안 결함은 무엇입니까? [닫은]


16

지망생 WP 플러그인 개발자로서, 내가 찾아야 할 주요 보안 결함 / 구멍은 무엇입니까?

구성 패널 (예 : 입력 필드 및 항목)을 사용하여 새 플러그인을 작성하려고합니다. 내가 무엇을 걱정해야합니까?

예를 들어, 데이터 삭제가 / wp-admin / 영역에 있기 때문에 그렇게 큰 문제입니까? 누군가 악의적 인 사용자가 플러그인 페이지를 직접 방문하여 POST 요청 또는 이와 유사한 것을 보낼 수 있습니까?

감사합니다!

답변:


16

테마를 검토하는 데 사용되는 현재 (진행중인) 설정 / 데이터 보안 검사 목록을 기반으로 수정 된 검사 목록은 다음과 같습니다.

  1. 플러그인에는 모든 옵션, 사용자 정의 함수, 사용자 정의 변수 및 사용자 정의 상수 앞에 플러그인 슬러그가 있어야합니다.

  2. 플러그인은 오래된 웹 사이트 자습서 (예 : 오래된 스크립트)의 복사 및 붙여 넣기 스크립트를 사용하지 않고 적절한 데이터 보안을 포함하지 않고 의도적으로 플러그인 옵션 및 플러그인 설정 페이지를 구현해야합니다.

  3. 플러그인은 최상위 메뉴를 추가하는 대신 add_options_page()플러그인 설정 페이지를 Settings메뉴 에 추가 하는 기능을 사용해야 add_menu_page()합니다.

  4. 플러그인은 설정 페이지를 추가 할 수있는 적절한 기능 (예 :)을 사용해야합니다 manage_options.

  5. 플러그인은 설정 페이지에 여러 옵션을 작성하는 대신 단일 배열로 옵션을 저장해야합니다. 설정 API (아래 참조)를 사용하면이를 처리 할 수 ​​있습니다.

  6. 플러그인이 설정 API를 사용한다 얻을 및 양식 입력 데이터를 저장하는 대신에 의존 (아래 참조) $_POST$_REQUEST직접 데이터.

  7. 체크 박스를 선택 옵션은, 플러그인은 사용해야 checked()하고 selected()출력하는 기능 checked="checked"selected="selected", 각각.

  8. 플러그인은 데이터베이스에 데이터를 입력하기 전에 모든 신뢰할 수없는 데이터의 유효성을 검사하고 삭제해야하며 설정 양식 필드에 출력하기 전에 및 테마 템플리트 파일에 출력되기 전에 신뢰할 수없는 모든 데이터를 이스케이프해야합니다.

  9. 플러그인은 esc_attr()텍스트 입력 및 텍스트 영역 esc_html()(또는 esc_textarea()WP 3.1)에 사용해야 합니다 .

  10. 설정 API를 사용하지 않는 경우 플러그인은 설정 페이지 nonce 검사를 명시 적으로 제공해야합니다.

  11. 또한 플러그인은 사용하기 쉽고 안전하며 설정 페이지의 많은 노력을 처리하는 설정 API를 사용하는 것이 좋습니다.

설정 API 사용에 대한 유용한 자습서는 다음을 참조하십시오.

안전하고 확실하게 코딩 된 테마 설정 페이지가있는 테마를 확인하려면 다음 테마를 확인하십시오.
http://wordpress.org/extend/themes/coraline


그리고 추가해야합니다 : 누군가가 목록에서 누락 된 것을 본다면, 주석 을 작성하십시오. 체크리스트에 추가하여 테마의 보안 검토를 향상시키는 데 도움이됩니다!
Chip Bennett

와우, 훌륭한 목록, 감사합니다. 이 질문을 커뮤니티 위키로 만들고 가치와 토론을 정교하게하기 위해 이러한 점을 각자의 답으로 삼을 가치가 있는지 궁금합니다.
goldenapples

나는 그것을 좋아할 것이지만, 원래 포스터의 질문을 납치하고 싶지는 않습니다 (StackExchange에서 작업이 수행되는 방법이 아니라면 여전히 여기에 있습니다 ...).
칩 베넷

나도 몰라 .. 중재자 재량에 맡기십시오. 이것은 중요하고 모범 사례가 여전히 진행되고 있기 때문에 훌륭한 위키 질문을하는 것처럼 보입니다. @Rarst?
goldenapples

필요한 경우 새 질문을 만들 수 있습니까?
칩 베넷

11

여기에는 두 가지 측면이 있습니다.

  1. 기본 원리들.

    • SQL 인 젝트를 위해 데이터베이스에 기록 된 내용을 확인해야합니다.
    • 화면에 인쇄되는 것은 유해한 JavaScript를 인쇄하지 않는지 확인해야합니다.
    • 누군가 무언가를 할 때마다 자신의 의도이고 적절한 능력을 가지고 있는지 확인해야합니다.
    • 당신이나 나도 확인하지 않을 많은 것들이 더 있습니다.
  2. 사양.

    • 최신 WordPress는 보안을 중요하게 생각하며 개발자가 쉽게 사용할 수 있도록합니다.
    • 따라서 대부분의 작업에서 WP API를 사용하여 수행 할 수있는 방법이 있습니다.
    • 따라서 첫 단계는 무엇이든 적절한 API를 연구하고 공부하는 것입니다.
    • 일반적이고 단순한 기능에서 멀어 질수록 공부하고 구현하는 데 더 복잡한 것들이 필요합니다.

1
  1. defined('ABSPATH') or die('Access denied');워드 프레스에서 직접 사용한 모든 플러그인의 스크립트에 추가
  2. 모든 디렉토리에 빈 index.php 파일 추가
  3. 특정 플러그인 파일에 직접 액세스하는 것을 방지하기 위해 필요한 지침과 함께 플러그인 디렉토리에 .htaccess를 추가하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.