Cách tốt nhất để vệ sinh dữ liệu là gì?


7

Tôi đã đọc một số chủ đề về điều này và những người khác nhau có quan điểm khác nhau về thực tiễn tốt nhất.

Về mặt WordPress, làm cách nào để ghi dữ liệu vào cơ sở dữ liệu một cách an toàn nhất?

Đây là một chèn tôi đang sử dụng bây giờ:

$result = $wpdb->insert(
    $table_name , 
    array( 
        'arena'         => $galleryData['arena'],
        'year'          => substr( $galleryData['season'], 2 ),
        'copyright'     => $galleryData['copyright'],
        'description'   => $galleryData['description'],
        'path'          => $galleryData['path'],
        'fk_brand_id'   => $galleryData['brand']
    ), 
    array( '%s', '%d', '%s', '%s', '%s', '%d' )
);

Một cách khác để chèn dữ liệu là làm điều này:

$sanitized_sql = $wpdb->prepare( "
    INSERT INTO my_plugin_table 
    SET 
        field1 = %1$d,
        field2 = %2$s,
        field3 = %3$s’,
        32, 
        'Aaron Brazell',
        'Washington, D.C'
" );
$wpdb->query( $sanitized_sql );

Tôi vẫn cần vệ sinh dữ liệu bằng cách sử dụng wp_kses()hay mysql_real_escape_string()?

Tôi chỉ bối rối về phương pháp nào là tốt hơn để ghi dữ liệu vào cơ sở dữ liệu một cách an toàn. Tôi tìm thấy một câu trả lời hữu ích trên Stack Overflow .

Vậy tôi nên hay không nên vệ sinh dữ liệu trước khi nhập?

Câu trả lời:


1

Không có vệ sinh đã được thực hiện. Vâng, mysql_real_escape_opes đã hoàn thành, nó được coi là hình thức xấu để lọc html trên đầu vào. Cá nhân tôi nghĩ rằng làm điều đó trên đầu ra vi phạm DRY. Nếu bạn đã làm trong WordPress, tôi rất nghi ngờ ở một nơi khác sẽ làm điều đó một lần nữa dẫn đến việc mã hóa các thực thể html kép.

Nhân tiện, wpdb :: insert về cơ bản chỉ là một trình bao bọc cho wpdb :: chuẩn bị.


Cám ơn giải thích rõ ràng. Vì vậy, không có điểm thực sự trong việc sử dụng wp_ksestrước khi lưu trữ dữ liệu vào DB? Hoặc bất kỳ bộ lọc khác được tìm thấy ở đây? codex.wordpress.org/Data_Validation
Steven

Chà tôi đoán nó thực sự phụ thuộc vào những gì bạn đang làm với dữ liệu. Nếu bạn tự xử lý hoàn toàn thì hình thức tốt là thực hiện nó trên đầu ra.
Backie

4

Lưu ý rằng lưu trữ dữ liệu an toàn khác với dữ liệu an toàn . Ví dụ, mã JavaScript có thể hoàn toàn vô hại trong bối cảnh bảo mật cơ sở dữ liệu, nhưng cơn ác mộng trong bối cảnh của giao diện người dùng.

Không có cách tiếp cận chăn đơn, đó là lý do tại sao WordPress có số lượng lớn các chức năng liên quan .

Bạn phải xem xét:

  1. Dữ liệu là gì.
  2. Nó đến từ đâu.
  3. Làm thế nào nó sẽ được sử dụng.

Bạn có bất kỳ tài liệu tham khảo tốt cho điểm 1-3? Tôi đã thấy trang Xác thực dữ liệu - đó là những gì tôi đã sử dụng cho đến nay. Nhưng tôi vẫn không chắc chắn về cách tốt hơn để lưu trữ / truy xuất dữ liệu theo cách an toàn nhất được người dùng nhập vào.
Steven

@Steven tốt, trang đó khá toàn diện trong bối cảnh của WP. Điểm quan trọng nhất là khi bắt đầu - " dữ liệu không đáng tin cậy [..] cần được xác nhận cả trên đầu vàođầu ra ". Vì vậy, bạn cần vệ sinh dữ liệu không đáng tin cậy khi nó đi đến cơ sở dữ liệu ( ->prepare()và như vậy) và khi nào nó sẽ hiển thị ( esc_và như vậy).
Hiếm
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.