Làm thế nào và khi nào sử dụng filter_xss () và check_plain ()?


11

Có rất nhiều tệp mẫu như thế này views-view-fields--magazine--magazine.tpl.phptrong trang web của tôi. Làm thế nào và khi nào tôi nên sử dụng bộ lọc_xss () và check_plain () để cải thiện bảo mật? ví dụ đây là mã:

<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>

Làm thế nào để tôi có thể áp dụng các chức năng trong đó?


Sử dụng filter_xss()khi bạn muốn lọc XSS khỏi nội dung nguy hiểm tiềm tàng (tức là nội dung từ người dùng không tin cậy) và check_plain()khi bạn muốn thoát các ký tự đặc biệt HTML khỏi chuỗi
Clive

Câu trả lời:


13

Đầu tiên, hãy đọc về những điều này trong API Drupal:

Vì vậy, check_plain()mã hóa ký tự đặc biệt có ý nghĩa đặc biệt trong HTML (như <&) vào thực thể văn bản đơn giản (ví dụ &lt;&amp;tương ứng) mà sẽ làm cho những được trả lại theo nghĩa đen (không giải thích dưới dạng HTML) khi mà chuỗi mà sau đó sẽ được hiển thị như là một phần của một trang với Đánh dấu HTML. Hàm này filter_xss()lọc một chuỗi HTML để ngăn các lỗ hổng cross-site-scripting (XSS). Nó làm bốn điều:

  • Xóa các ký tự và cấu trúc có thể lừa trình duyệt
  • Đảm bảo tất cả các thực thể HTML được định dạng tốt
  • Đảm bảo tất cả các thẻ và thuộc tính HTML được định dạng tốt
  • Đảm bảo không có thẻ HTML nào chứa URL có giao thức không được phép (ví dụ: javascript :)

Cả hai chức năng đều được sử dụng để vệ sinh dữ liệu từ người dùng để đảm bảo rằng mọi thao tác tiêm của người dùng đều được trung hòa trước khi dữ liệu được hiển thị trên trang web của bạn.

Bạn không bao giờ vượt qua cùng một chuỗi thông qua cả hai .

Nếu bạn sử dụng check_plain()thì chuỗi được truyền cho hàm được coi là được sử dụng dưới dạng văn bản thuần túy (không phải HTML). Sau đó filter_xss()là không cần thiết, vì check_plain()sẽ luôn làm cho chuỗi văn bản đơn giản.

Nếu bạn sử dụng filter_xss(), thì chuỗi được truyền cho hàm được coi là HTML và check_plain()sẽ làm rối tung nó.

Khi tôi nhìn vào mẫu mà bạn sử dụng làm ví dụ, có vẻ như cả ba trường được truyền đến print()đều xuất phát từ nội dung đã được khử trùng và không cần vệ sinh nữa.

Tuy nhiên, nếu bạn tạo mô-đun riêng thu thập dữ liệu nhập của người dùng mà không chuyển qua bộ lọc văn bản "an toàn" như "HTML đã lọc" hoặc "Đồng bằng", bạn phải sử dụng các chức năng này cho mục đích vệ sinh.


Tôi có thể kiểm tra đầu vào từ đâu từ người dùng? ví dụ: có một loại nội dung và người dùng ẩn danh được phép tạo loại nút đó.
M ama D

@Drupalist, bạn không bao giờ nên cho phép người dùng ẩn danh sử dụng định dạng văn bản "không an toàn". Điều hướng đến Quản trị »Cấu hình» Tác giả nội dung »Định dạng văn bản . Các định dạng văn bản "an toàn" đi kèm với Drupal là "HTML được lọc" và "Văn bản thuần túy". Nếu đây là các định dạng duy nhất được phép cho người dùng Ẩn danh, Drupal sẽ thực hiện các kiểm tra cần thiết cho bạn đối với bất kỳ loại nút tích hợp nào và bất kỳ loại nút nào bạn tạo bằng tính năng Trường lõi . Nếu trường hợp sử dụng của bạn khác với trường hợp này, hãy đặt một câu hỏi mới đánh vần trường hợp sử dụng.
Cấp tiến miễn phí

Người dùng ẩn danh chỉ được phép sử dụngplain text
M ama D

@Drupalist, không sao đâu. Không cần sử dụng các chức năng này để vệ sinh văn bản Plain.
Cấp tiến miễn phí

3
@ARUN, không. Thực hành Drupal tiêu chuẩn là luôn lưu chính xác những gì người dùng nhập vào DB và vệ sinh văn bản trước khi kết xuất.
Cấp tiến miễn phí
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.