Was ist der beste Weg, um Daten zu bereinigen?

7

Ich habe verschiedene Themen darüber gelesen und verschiedene Leute haben unterschiedliche Ansichten über die besten Praktiken.

Wie schreibe ich in Bezug auf WordPress Daten am sichersten in die Datenbank?

Dies ist eine Beilage, die ich jetzt verwende:

$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' )
);

Eine andere Möglichkeit zum Einfügen von Daten besteht darin, Folgendes zu tun:

$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 );

Muss ich Daten noch mit wp_kses()oder bereinigen mysql_real_escape_string()?

Ich bin nur verwirrt darüber, welche Methode besser ist, um Daten sicher in die Datenbank zu schreiben. Ich habe eine hilfreiche Antwort zu Stack Overflow gefunden .

Soll ich also Daten vor der Eingabe bereinigen oder nicht?

Steven
quelle

Antworten:

1

Nein, die Desinfektion ist bereits abgeschlossen. Nun, die mysql_real_escape_string ist fertig, es wird als schlechte Form angesehen, HTML bei der Eingabe zu filtern. Ich persönlich denke, dass es bei der Ausgabe irgendwie gegen DRY verstößt. Wenn Sie dies in WordPress getan haben, vermute ich sehr, dass irgendwo anders dies erneut geschieht, was zu einer doppelten Codierung von HTML-Entitäten führt.

Übrigens ist wpdb :: insert im Grunde nur ein Wrapper für wpdb :: prepare.

Backie
quelle
Danke, dass du das geklärt hast. Es macht also keinen Sinn, wp_ksesvor dem Speichern von Daten in der Datenbank zu verwenden? Oder irgendein anderer Filter, der hier gefunden wurde? codex.wordpress.org/Data_Validation
Steven
Nun, ich denke, es hängt wirklich davon ab, was Sie mit den Daten machen. Wenn Sie es vollständig selbst erledigen, ist es eine gute Form, es bei der Ausgabe zu tun.
Backie
4

Beachten Sie, dass sich das sichere Speichern von Daten von sicheren Daten unterscheidet . Zum Beispiel kann JavaScript-Code im Kontext der Datenbanksicherheit völlig harmlos sein, im Kontext des Frontends jedoch ein Albtraum.

Es gibt keinen pauschalen Ansatz, deshalb verfügt WordPress über eine Vielzahl verwandter Funktionen .

Sie müssen berücksichtigen:

  1. Welche Daten sind.
  2. Woher kommt es.
  3. Wie wird es verwendet?
Selten
quelle
Haben Sie gute Referenzen für Punkt 1-3? Ich habe die Seite Datenüberprüfung gesehen - das habe ich bisher verwendet. Ich bin mir jedoch immer noch nicht sicher, wie das Speichern / Abrufen von Daten auf die sicherste Art und Weise, die von Benutzern eingegeben wird, besser ist.
Steven
@Steven gut, diese Seite ist im Zusammenhang mit WP ziemlich umfassend. Der wichtigste Punkt ist am Anfang - " nicht vertrauenswürdige Daten [..] müssen sowohl bei der Eingabe als auch bei der Ausgabe validiert werden ". Sie müssen also nicht vertrauenswürdige Daten bereinigen, wenn sie in die Datenbank ( ->prepare()und dergleichen) und in die Anzeige ( esc_und dergleichen) gelangen.
Rarst