언제 어떻게 filter_xss () 및 check_plain ()을 사용합니까?


11

views-view-fields--magazine--magazine.tpl.php내 웹 사이트에는 이와 같은 템플릿 파일이 많이 있습니다. 보안을 개선하기 위해 언제 어떻게 filter_xss () 및 check_plain ()을 사용해야합니까? 예를 들어 이것은 코드입니다.

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

그 기능을 어떻게 적용 할 수 있습니까?


사용 filter_xss()당신은 잠재적으로 위험한 내용 (신뢰할 수없는 사용자로부터 즉, 컨텐츠)에서 필터 XSS 원하는 때, 그리고 check_plain()당신은 문자열에서 HTML 특수 문자를 탈출 할 때
클라이브

답변:


13

먼저 Drupal API에서 이에 대해 읽으십시오.

따라서 check_plain()HTML에서 특별한 의미를 가진 특수 문자 (예 : <&)를 일반 텍스트 엔티티 (즉 &lt;, &amp;각각 )로 인코딩 하면 해당 문자열이 페이지의 일부로 표시 될 때 문자 그대로 (HTML로 해석되지 않음) 렌더링됩니다. HTML 마크 업. 이 함수 filter_xss()는 XSS (Cross-Site-Sscripting) 취약성을 방지하기 위해 HTML 문자열을 필터링합니다. 네 가지 일을합니다.

  • 브라우저를 속일 수있는 문자 및 구문 제거
  • 모든 HTML 엔티티가 올바른지 확인
  • 모든 HTML 태그 및 속성이 올바른지 확인
  • 허용되지 않는 프로토콜 (예 : javascript :)이 포함 된 URL에 HTML 태그가 포함되어 있지 않은지 확인

두 기능 모두 사용자 데이터를 삭제 하여 사이트에 데이터가 렌더링 되기 전에 사용자 주입이 중화되도록하는 데 사용 됩니다.

같은 문자열둘 다 통과하지 마십시오 .

사용 check_plain()하는 경우 함수에 전달 된 문자열은 HTML이 아닌 일반 텍스트 로 사용됩니다 . 그리고 filter_xss()이후, 필요하지 않습니다 check_plain()항상 문자열 일반 텍스트를 만들 것입니다.

를 사용 filter_xss()하면 함수에 전달 된 문자열이 HTML로되어 check_plain()엉망이됩니다.

예제로 사용하는 템플릿을 살펴보면 전달 된 세 개의 필드가 모두 print()위생 처리 된 콘텐츠 에서 비롯된 것으로 더 이상 위생이 필요하지 않은 것처럼 보입니다 .

그러나 "Filtered HTML"또는 "Plain"과 같은 "안전한"텍스트 필터를 통과하지 않고 사용자 입력을 수집하는 고유 한 모듈 을 작성 하는 경우 위생 기능을 위해이 기능을 사용해야합니다.


사용자의 입력을 어디서 확인할 수 있습니까? 예를 들어, 컨텐츠 유형이 있으며 익명 사용자가 해당 종류의 노드를 작성할 수 있습니다.
M ama D

@Drupalist, 익명 사용자가 "안전하지 않은"텍스트 형식을 사용하도록 허용해서는 안됩니다. 에 이동 관리»구성»콘텐츠 제작»텍스트 형식 . Drupal과 함께 제공되는 "안전한"텍스트 형식은 "필터링 된 HTML"및 "일반 텍스트"입니다. 이것이 익명 사용자에게 허용 되는 유일한 형식 인 경우 Drupal은 내장 노드 유형 및 핵심 필드 기능으로 생성 한 모든 노드 유형에 대해 필요한 검사를 수행합니다 . 사용 사례가 이와 다른 경우 사용 사례를 설명하는 새로운 질문을하십시오.
무료 Radical

익명의 사용자 만 사용할 수 있습니다plain text
M ama D

@Drupalist, 괜찮습니다. 일반 텍스트를 삭제하기 위해이 기능을 사용할 필요는 없습니다.
무료 Radical

3
@ARUN, 아니오. 표준 Drupal 사례는 사용자가 DB에 입력 한 내용 을 항상 정확하게 저장하고 렌더링 전에 텍스트를 삭제하는 것입니다.
무료 Radical
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.