Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL php Vars Sicherheit

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SQL php Vars Sicherheit

    Fragen über Fragen, nehmt es mir nicht zu sehr übel.

    Wenn man einen SQL Select aufgrund eines Datensatzes mit eines Integers
    macht und diese aus einem $_POST Array kommt, reicht es dann aus
    PHP-Code:
    $var intval$_POST['var'] ); 
    zu schreiben oder ist ein "mysql_real_escape_string" auch hier unverzichtbar?

    Fängt man z.B. eine eingeschleuste id vorher ab, in dem z.B. prüft ob
    diese id in einem bestimmten Datensatz vorkommt oder reicht es dann
    z.B. nach der Abfrage zu prüfen, ob überhaupt ein Ergebnis vorliegt und
    sofern das Array etc. leer ist, die Schranke davorzumachen? Oder lässt
    man das einfach durchlaufen. Ein Ergebnis gibt es dann eh keins und
    Lese bzw. Schreibrechte sind in einem Objekt verankert, das in der
    WHERE Bedingung mit drinsteckt.

    Grüße
    Tine

  • #2
    auf jeden fall reicht es ints mit (int) explizit zu casten bzw. mit intval () umzuwandeln. ich benutze dafür in meiner db klasse eine statische methode die je nach typangabe nur (int) benutzt, oder aber die vorhandene db verbindung und mysql_real_escape ():

    PHP-Code:
      function Escape (& $sValue $sType null)
        {
        
    $oSelf = & $GLOBALS[APPLICATION_VAR]->oDatabase;
        
        switch (
    $sType):

          case 
    'int':
            
    # -- explizite Typumwandlung nach INT
            
    $sValue = (int) $sValue;
            break;

          default:
            
    # -- Fehlende Verbindung selbständig aufbauen
            
    if (false === $oSelf->rConnection
              {
              ...
              }

            
    # -- Sonderzeichen escapen
            
    $sValue mysql_real_escape_string ($sValue $oSelf->rConnection);
            break;

        endswitch;
        return (
    true);
        } 
    sowas wie lese- und schreibrechte, sowie spezielle accounts etc. solltest du nie an spezifischen id's festmachen, sondern immer mit einem eigenen feld oder einer eigenen tabelle festlegen.

    Kommentar


    • #3
      Ich machs eigentlich ähnlich wie quoteSmart() von mysql_real_escape_string()

      Wenn is_numeric() TRUE liefert, wirds nochmal doppelt in UNSIGNED INT gecastet (sprintf("SELECT .. WHERE id = %u", (int)$mValue) - (int) nur damit der Programmierer es gleich sieht oder die Platzhalter-Reihenfolge mal versehentlich verrutscht). Sonst eben mysql_real_escape_string().

      Unterscheide dabei noch zwischen quoteKey() - setzt die Backticks gleich noch mit ` - und quoteValue() - setzt bei INT eben keine ", bei Strings schon.
      Somit kann ich auch NULL setzen, ohne dass mein Code daraus 'NULL' oder `NULL` macht.

      Kommentar

      Lädt...
      X