Vệ sinh số WordPress

Bảo mật là quan trọng trong mọi trang web trên Internet. Gần 30% trang web được tạo bởi WordPress. Bản thân WordPress đã đủ an toàn nhưng khi chúng ta sử dụng plugin, việc xác thực phải là một vấn đề quan trọng ở đây

WordPress có chức năng khử trùng và xác thực đầu vào và đầu ra. Chỉ cần nhớ rằng không bao giờ tin tưởng dữ liệu người dùng. Chúng tôi phải xác thực dữ liệu của người dùng ở mọi nơi. Một lỗi trong một plugin có thể phá hủy mọi thứ ngay cả trên máy chủ

Sự khác biệt giữa Xác thực và Vệ sinh

Có sự khác biệt giữa vệ sinh và xác thực trong WordPress

Xác thực kiểm tra xem dữ liệu đầu vào có ở định dạng mong muốn hay không. Ví dụ: chúng tôi mong muốn nhận được địa chỉ email từ người dùng. Khi người dùng gửi dữ liệu, chúng tôi sẽ kiểm tra xem đó có phải là địa chỉ email hay không

Vệ sinh hoặc thoát áp dụng một số bộ lọc cho dữ liệu để đảm bảo an toàn. Có thể dữ liệu chứa mã SQL injection. Đây là nhiệm vụ khử trùng để phát hiện và lọc nó để đảm bảo an toàn cho cơ sở dữ liệu

Chúng tôi đã sử dụng Người dùng làm người gửi dữ liệu đến trang web của chúng tôi. Đôi khi, người dùng thực sự điền vào biểu mẫu và đôi khi đó là API hoặc dịch vụ web gửi dữ liệu đến trang web của chúng tôi. Bất kể người dùng là ai, xác thực và vệ sinh dữ liệu

Ngay cả quản trị viên cũng là người dùng và người dùng sẽ cố ý hoặc vô tình nhập dữ liệu không chính xác. Công việc của bạn là bảo vệ họ khỏi chính họ

Quy tắc vệ sinh và xác thực trong WordPress

Có thể có sự khác biệt giữa làm sạch và xác thực trong WordPress và các CMS khác, nhưng các quy tắc sau nhìn chung giống nhau

1. Đừng tin ai

Ý tưởng là bạn không nên cho rằng bất kỳ dữ liệu nào do người dùng nhập vào đều an toàn. Bạn cũng không nên cho rằng dữ liệu bạn đã truy xuất từ ​​​​cơ sở dữ liệu là an toàn

2. Xác thực đầu vào, thoát đầu ra

Xác thực dữ liệu của bạn ngay khi bạn nhận được dữ liệu từ người dùng. Vệ sinh (hoặc thoát) dữ liệu khi bạn muốn hiển thị dữ liệu đó

3. Sử dụng Trình xác thực và Trình khử trùng WordPress

WordPress có những chức năng riêng để thực hiện công việc này. Chúng tôi cũng có thể sử dụng các bộ lọc PHP nhưng các chức năng của WordPress có nhiều bộ lọc hơn và giúp chúng tôi dễ sử dụng chúng

Xác thực dữ liệu trong WordPress

Đầu tiên, hãy nói về xác thực. Như bạn đã biết, xác thực là kiểm tra dữ liệu để xem chúng có ở định dạng mong muốn hay không

1. Các hàm tích hợp trong PHP

  • ngay lập tức. Xác định xem một biến có được khai báo và khác NULL không
if (isset($var)) {
    echo "This var is set so I will print.";
}
  • trống rỗng. Xác định xem một biến có trống không
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
  • mb_strlen và strlen. Lấy độ dài của một chuỗi. Đối số thứ hai xác định định dạng mã hóa
mb_strlen($string, '8bit');
echo strlen($str);
  • preg_match. Thực hiện khớp biểu thức chính quy
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
  • strpos. Tìm vị trí xuất hiện đầu tiên của một chuỗi con trong một chuỗi
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
  • đếm. Đếm tất cả các phần tử trong một mảng hoặc thứ gì đó trong một đối tượng
  • in_array. Kiểm tra nếu một giá trị tồn tại trong một mảng
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
  • is_int và is_float. Kiểm tra nó là số nguyên hay float hay không. Thông thường, chỉ cần truyền dữ liệu dưới dạng số với intval hoặc floatval là đủ. Có các chức năng khác. is_bool, is_numeric, is_null, is_string, is_object

2. Chức năng WordPress

  • is_email. Xác minh rằng một email là hợp lệ
if ( is_email( '[email protected]' ) ) {
    echo 'email address is valid.';
}
  • term_exists. Xác định xem một thuật ngữ phân loại tồn tại
$term = term_exists( 'Uncategorized', 'category' );
if ( $term !== 0 && $term !== null ) {
    echo __( "'Uncategorized' category exists!", "textdomain" );
}
  • Tên người dùng đã tồn tại. Xác định xem tên người dùng đã cho có tồn tại hay không
________số 8_______
  • xác thực_file. Xác thực tên tệp và đường dẫn theo bộ quy tắc được phép
$path = 'uploads/2012/12/my_image.jpg';
return validate_file( $path ); // Returns 0 (valid path)
$path = '../../wp-content/uploads/2012/12/my_image.jpg';
return validate_file( $path ); // Returns 1 (invalid path)
  • kiêng khem. Chuyển đổi một giá trị thành số nguyên không âm
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
0
  • zeroise. Thêm số 0 đứng đầu khi cần thiết
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
1
  • wp_kses. Chỉ cho phép một số thẻ HTML trong dữ liệu của bạn chấp nhận ba đối số
    • nội dung. (chuỗi) Nội dung lọc qua kses
    • allow_html. Một mảng trong đó mỗi khóa là một phần tử HTML được phép và giá trị là một mảng các thuộc tính được phép cho phần tử đó
    • allow_protocols. Không bắt buộc. Giao thức được phép trong các liên kết (ví dụ: http, mailto, feed, v.v. )
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
2
  • wp_kses_post. Vệ sinh nội dung cho các thẻ HTML được phép cho nội dung bài đăng
  • wp_kses_data. Làm sạch nội dung với các quy tắc KSES HTML được phép
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
3
  • wp_kses_allowed_html. Trả về một mảng các thẻ và thuộc tính HTML được phép cho một ngữ cảnh nhất định
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
4
  • cân bằngTags. Cân bằng thẻ nếu bắt buộc hoặc nếu tùy chọn 'use_balanceTags' được đặt thành true
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
5

Sẽ xuất HTML này

if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
6
  • force_balance_tags. Cân bằng các thẻ của chuỗi bằng cách sử dụng ngăn xếp đã sửa đổi
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
7

không bị ngắt, khi html sau thẻ more bị cắt

if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
8

nên đổi thành

if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}
9

Vệ sinh dữ liệu trong WordPress

Vệ sinh là quá trình làm sạch hoặc lọc dữ liệu đầu vào của bạn. Cho dù dữ liệu là từ người dùng hay API hoặc dịch vụ web, bạn sử dụng quy trình vệ sinh khi bạn không biết điều gì sẽ xảy ra

  • esc_html. Thoát cho các khối HTML
mb_strlen($string, '8bit');
echo strlen($str);
0
  • esc_attr. Thoát cho các thuộc tính HTML
mb_strlen($string, '8bit');
echo strlen($str);
1
  • esc_js. Thoát dấu nháy đơn, htmlspecialchar ” & và sửa lỗi kết thúc dòng
mb_strlen($string, '8bit');
echo strlen($str);
2
  • esc_url. Kiểm tra và làm sạch một URL
mb_strlen($string, '8bit');
echo strlen($str);
3
  • esc_url_raw. Thực hiện esc_url() để sử dụng cơ sở dữ liệu
  • urlcode_deep. Điều hướng qua một mảng, đối tượng hoặc vô hướng và mã hóa các giá trị sẽ được sử dụng trong một URL
  • esc_textarea. Thoát cho các giá trị textarea
mb_strlen($string, '8bit');
echo strlen($str);
4
  • vệ sinh_email. Loại bỏ tất cả các ký tự không được phép trong email
mb_strlen($string, '8bit');
echo strlen($str);
5
  • sanitize_file_name. Vệ sinh tên tệp, thay thế khoảng trắng bằng dấu gạch ngang
  • sanitize_html_class. Vệ sinh một tên lớp HTML để đảm bảo nó chỉ chứa các ký tự hợp lệ
mb_strlen($string, '8bit');
echo strlen($str);
6
  • vệ sinh_key. Vệ sinh một phím chuỗi
  • sanitize_meta. Vệ sinh giá trị meta
  • vệ sinh_term. Vệ sinh hạn tất cả các lĩnh vực
  • sanitize_term_field. Làm sạch giá trị trường trong thuật ngữ dựa trên ngữ cảnh
  • sanitize_mime_type. Vệ sinh một loại mime
mb_strlen($string, '8bit');
echo strlen($str);
7
  • sanitize_option. Vệ sinh các giá trị tùy chọn khác nhau dựa trên bản chất của tùy chọn
  • sanitize_sql_orderby. Đảm bảo một chuỗi là mệnh đề SQL 'order by' hợp lệ
  • sanitize_text_field. Vệ sinh một chuỗi từ đầu vào của người dùng hoặc từ cơ sở dữ liệu
mb_strlen($string, '8bit');
echo strlen($str);
8
  • sanitize_textarea_field. Vệ sinh một chuỗi nhiều dòng từ đầu vào của người dùng hoặc từ cơ sở dữ liệu
  • vệ sinh_title. Biến chuỗi thành slug, có thể được sử dụng trong URL hoặc thuộc tính HTML
mb_strlen($string, '8bit');
echo strlen($str);
9
  • sanitize_title_for_query. Làm sạch tiêu đề với bối cảnh 'truy vấn'
  • sanitize_title_with_dash. Làm sạch tiêu đề, thay thế khoảng trắng và một vài ký tự khác bằng dấu gạch ngang
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
0
  • sanitize_user. Vệ sinh tên người dùng, loại bỏ các ký tự không an toàn
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
1
  • sanitize_hex_color. Vệ sinh một màu hex
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
2
  • sanitize_hex_color_no_hash. Vệ sinh một màu hex mà không cần băm. Sử dụng sanitize_hex_color() khi có thể
  • wp_filter_post_kses. Vệ sinh nội dung cho các thẻ HTML được phép cho nội dung bài đăng
  • wp_filter_nohtml_kses. Tách tất cả HTML khỏi chuỗi văn bản
  • wp_rel_nofollow. Thêm chuỗi rel=”nofollow” vào tất cả các phần tử HTML A trong nội dung
  • tag_escape. Thoát tên thẻ HTML

Thoát khỏi bản địa hóa

  • _e. Hiển thị văn bản đã dịch
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
3
  • __. Truy xuất bản dịch của $text
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
4
  • _x. Truy xuất chuỗi đã dịch với ngữ cảnh gettext
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
5
  • esc_html__. Truy xuất bản dịch của $text và thoát nó để sử dụng an toàn trong đầu ra HTML
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
6
  • esc_html_e. Hiển thị văn bản đã dịch đã được thoát để sử dụng an toàn trong đầu ra HTML
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
7
  • esc_html_x. Dịch chuỗi với ngữ cảnh gettext và thoát nó để sử dụng an toàn trong đầu ra HTML
  • esc_attr__. Truy xuất bản dịch của $text và thoát nó để sử dụng an toàn trong một thuộc tính
  • esc_attr_e. Hiển thị văn bản đã dịch đã được thoát để sử dụng an toàn trong một thuộc tính
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
8
  • esc_attr_x. Dịch chuỗi với ngữ cảnh gettext và thoát nó để sử dụng an toàn trong một thuộc tính

Tài liệu WordPress nói rằng bạn không nên sử dụng

preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
9

Thay vào đó, bạn nên sử dụng chức năng sau

$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
0
  • chống thư rác. Chuyển đổi các ký tự địa chỉ email thành các thực thể HTML để chặn các chương trình thư rác
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
1
  • add_query_arg. Truy xuất chuỗi truy vấn URL đã sửa đổi
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
2
  • remove_query_arg. Xóa một mục hoặc nhiều mục khỏi chuỗi truy vấn
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
3

Cơ sở dữ liệu thoát

WordPress có một số chức năng để tương tác cơ sở dữ liệu. Các chức năng này có bộ lọc vệ sinh riêng. Nhưng như bạn biết một số trong số họ không có. Sau đó, nhiệm vụ của chúng tôi là vệ sinh đầu vào

  • esc_sql. Thoát dữ liệu để sử dụng trong truy vấn MySQL
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
4
  • wpdb. esc_like. Nửa đầu thoát cho các ký tự đặc biệt LIKE % và _ trước khi chuẩn bị cho MySQL
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
5

chuyển hướng

  • wp_redirect. Chuyển hướng đến một trang khác
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
6

Chuyển hướng cũng có thể là bên ngoài và/hoặc sử dụng mã “Đã di chuyển vĩnh viễn”

$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
7
  • wp_safe_redirect. Thực hiện chuyển hướng (cục bộ) an toàn, sử dụng wp_redirect()
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
8

Lời cuối cùng về Vệ sinh và Xác thực trong WordPress

Vệ sinh và xác thực trong WordPress là vấn đề bảo mật mà mọi nhà phát triển nên làm quen với nó. Như bạn biết nếu bạn muốn phát triển plugin hoặc chủ đề tùy chỉnh của mình, điều quan trọng là mã của bạn có đủ an toàn hay không

Vệ sinh trong Wordpress là gì?

Xóa ngắt dòng, tab và khoảng trắng thừa .

Làm sạch đầu vào của người dùng có nghĩa là gì?

Khử trùng có thể bao gồm việc loại bỏ các ký tự không mong muốn khỏi đầu vào bằng cách xóa, thay thế, mã hóa hoặc thoát các ký tự . Quá trình khử trùng có thể xảy ra sau đầu vào (khử trùng đầu vào) hoặc trước khi dữ liệu được truyền qua ranh giới tin cậy (khử trùng đầu ra).

Bạn có nên vệ sinh đầu vào của người dùng?

Khử trùng và xác thực đầu vào thường là lớp bảo vệ đầu tiên . Sanitizing bao gồm xóa bất kỳ ký tự không an toàn nào khỏi đầu vào của người dùng và xác thực sẽ kiểm tra xem dữ liệu có ở định dạng và loại dự kiến ​​hay không. Những kẻ tấn công đã sử dụng các lỗ hổng cổ điển trong nhiều năm với tỷ lệ thành công khá cao.

Vệ sinh mã có nghĩa là gì?

Khử trùng HTML là quá trình kiểm tra tài liệu HTML và tạo tài liệu HTML mới chỉ giữ lại bất kỳ thẻ nào được chỉ định là “an toàn” và mong muốn. HTML sanitization can be used to protect against cross-site scripting (XSS) attacks by sanitizing any HTML code submitted by a user.