2016-04-22 10 views
0

Also zur Zeit habe ich eine Form mit einem Element des Typs date, wenn legte ich die Form mit diesem Verfahren:Sicher, Datum direkt in MySQL-Datenbank einzufügen?

<?php 
// Only process POST requests. 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $date_posted = $_POST['date_posted']; 

    $stmt = $mysqli->prepare("INSERT INTO test(date_posted) VALUES (?)"); 
    $stmt->bind_param("s", $date_posted); 
    $stmt->execute(); 
    $stmt->close(); 

    http_response_code(200); 
} else { 
    http_response_code(403); 
} 
exit; 

Dies ist für die Zwecke dieser Demo vereinfacht wird - aber es funktioniert richtig.

Meine Frage ist, dass ich normalerweise alle Arten von Charakterprüfungen auf Dinge wie text Formularelemente ausführen würde, aber für ein date Objekt - ist es sicher, einfach so direkt in die Datenbank einzufügen? Gibt es einen potenziellen Missbrauch, den ich überprüfen sollte, bevor ich die Sicherheitseinstellungen einfüge?

+0

Das als String gezählt denke ich –

Antwort

-2

Sie sollten die gleichen Plausibilitätsprüfungen durchführen wie für jedes andere Feld.

Ihr Formular darf nur Datumseinträge zulassen, aber ich könnte eine POST-Anfrage an Ihren Server mit allem, was ich wollte, im POST-Feld "date_posted" senden und für die SQL-Injektion verwenden.

+1

Ist die vorbereitete Aussage nicht die Möglichkeit, dies zu entfernen? – user3420034

+1

Dieser Code ist nicht anfällig für SQL-Injection. – Quentin

+0

Kannst du meine XSS-Attacke meinen? – HddnTHA

4

Also zur Zeit habe ich eine Form mit einem Element vom Typ Datum

Jede Form von Client-Seite Prüfung nicht auf sie verlassen werden kann. Der Browser unterstützt diesen Eingabetyp möglicherweise nicht oder der Benutzer kann ihn umgehen.

Gibt es einen möglichen Missbrauch, den ich überprüfen sollte, bevor Sie die Sicherheitseinstellungen vornehmen?

Sie verwenden gebundene Parameter, daher ist SQL-Injection kein Problem.

Das Schlimmste, was passieren kann, ist, dass jemand etwas sendet, das kein Datum ist (oder keine korrekt formatierten Daten). Dies wird eines von zwei Ergebnissen hat:

  • Es wird nicht die Datensyntax durch die Spalten Datentyp in der Tabelle und die INSERT nicht erforderlich erfüllen (leise, da Sie nicht auf Fehler testen)
  • Es Wird in die Tabelle eingefügt (zB wenn Sie ein VARCHAR-Feld haben) und Sie später versuchen, es als Datum zu behandeln und dann Fehler oder schlechte Daten zu erhalten.
+0

In diesem Fall verwende ich ein DATETIME-Feld in der Datenbank, also würde ich mir vorstellen, dass es dieses Element einfach nicht einfügt. Danke für die Info, gibt mir ein bisschen Ruhe! :) – user3420034

Verwandte Themen