Làm cách nào để tránh thoát khi lưu mã HTML trong một giá trị tùy chọn?


9

Tôi có trang Tùy chọn chủ đề nơi người dùng có thể thêm một số tùy chọn nhất định như liên kết Facebook, v.v. Một trong các tùy chọn dành cho một số mã quảng cáo và khi lưu dưới dạng tùy chọn, nó sẽ được thoát ra nhiều lần.

Cách tiếp cận tốt nhất để lưu mã được chèn trong trang quản trị <textarea>bằng cách sử dụng là update_option( 'sidebar_code', $_POST['sidebar_code'] );gì?

Câu trả lời:


8
stripslashes(wp_filter_post_kses(addslashes($_POST['sidebar_code'])));

nhưng bạn nên biết rằng bộ lọc kodes không an toàn 100%.


2
Ý bạn là gì khi không an toàn 100%?
Amit

Ý tôi là ai đó vẫn có thể XSS trang web của bạn nếu họ thực sự giỏi về nó. Nếu tôi không nhầm bản vá wp cuối cùng đã khắc phục lỗ hổng xss trong các chức năng của
ống

các ống loại bỏ tất cả các thuộc tính lớp và html bổ sung (ví dụ class = "classname" width = "100") có cách nào để khắc phục điều đó không?
Talon

11

Tôi đã thực hiện một cách tiếp cận khác về điều này. Tôi đã mã hóa và giải mã các tùy chọn của mình với các thực thể HTML. Một điều tôi không chắc chắn là liệu điều này có mở ra một cánh cửa khó chịu cho mọi người để điều khiển HTML thông qua hay không. Tôi đang dựa vào thực tế là chỉ quản trị viên mới được chỉnh sửa tùy chọn chủ đề, nhưng có lẽ tôi đang ngây thơ?

Đây là những gì khi tôi lưu một tùy chọn:

update_option('my_option', htmlentities(stripslashes($_REQUEST['my_option'])));

Và đây là giao diện khi tôi truy xuất một tùy chọn:

html_entity_decode(get_option('my_option',htmlentities($my_default_value)));

2

Đây không phải là một câu trả lời hoàn chỉnh cho câu hỏi của bạn, nhưng có thể chỉ cho bạn đi đúng hướng: Bạn có thể thử <?php esc_textarea( $text ) ?>, như chi tiết của bộ luật ở đây: http://codex.wordpress.org/Function_Reference/esc lòngarea .

Đoạn văn bản metabox của riêng tôi trông như thế này:

<?php 
  if ( $meta_box['type'] == "textarea" ) {
    $meta_box_value = esc_textarea( get_post_meta($post->ID, $meta_box['name'].'_value', true) );
    echo '<textarea class="meta-textarea" style="width: 100%;" cols="20" rows="2" name="' . $meta_box['name'] . '_value">' . $meta_box_value . '</textarea><br />';
  }
?>

Phụ thuộc vào những gì bạn đang làm. escunderarea sẽ chuyển đổi bất kỳ mã thực thể html sang HTML nào, vì vậy bạn không thể sử dụng nó với một khu vực richtext như tinyMCE.
Jake
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.