Benutzereingabe in die Datenbank

  • Angenommen, wir erwarten nur Strings oder Zahlen mit den von einem Benutzer gesendeten Daten. Ist es sicher genug, die Daten mit den Funktionen ereg und preg_match zu überprüfen? Gibt es eine Möglichkeit, sie zu fälschen? Sollten wir noch mysql_real_escape_string verwenden?

    30 December 2013
    BenjaminRafael
3 answers
  • Dies ist eine kurze Antwort ...

    Verwenden Sie PDO :

    Zum Beispiel Zend Framework verwendet diese Engine.

    22 November 2011
    Peter
  • ist sicher genug für Ihre eigenen Bedürfnisse. Wenn Sie mysql_real_escape_string aus irgendeinem Grund vermeiden möchten, möchte ich zuerst fragen, warum.

    Meine Antwort ist: sicher ... abhängig von Ihren Bedingungen

    können Sie gegen [0-9a-z] antreten und es gibt nichts zu fürchten. Versuchen Sie, ein Multibyte-Zeichen zu übergeben, um sicher zu sein. Solange Ihre Bedingung es Ihnen nicht erlaubt, irgendetwas zu tun, wenn das Spiel Ihren Anforderungen nicht entspricht, gibt es keine knifflige Umgehung, von der ich weiß, dass sie bösartige Zeichen in eine solch strenge Regel einschleusen.

    aber der Begriff "String" ist sehr offen. beinhaltet das auch die Zeichensetzung? welche Art usw. Wenn Sie Standardinjektionszeichen als "Zeichenfolge" zulassen, ist meine Antwort nicht mehr sicher.

    Ich empfehle jedoch mysql_real_escape_string () für alle Benutzer Übermittelte Informationen, unabhängig davon, wie Sie versuchen, diese zuvor zu reinigen.

    22 November 2011
    Kai QingDotNet Dreamer
  • Wenn Sie einen regulären Ausdruck verwenden, um gültige Eingaben abzugleichen, und dies erfolgreich ist, ist die Benutzereingabe gültig. Wenn Sie jedoch keine schädlichen Zeichen in gültigen Eingaben enthalten (insbesondere Anführungszeichen oder möglicherweise Multibyte-Zeichen), müssen Sie mysql_real_escape_string nicht aufrufen. Dasselbe Prinzip gilt für Folgendes:

     $user_in_num = intval( $_POST['in_num']); // Don't need mysql_real_escape_string here
     

    Also ungefähr das Folgende:

     $subject = $_POST['string_input'];
    if( !preg_match('/[^a-z0-9]/i', $subject)) 
    {
        exit( 'Invalid input');
    }
     

    Die Verwendung von $subject in einer SQL-Abfrage ist gut / sicher, wenn preg_match erfolgreich ist.

    22 November 2011
    nickb