kostenloser Webspace werbefrei: lima-city


MySQLi - Escapen von Parametern bei Prepared Statements

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    Hey ;)

    Ich beschäftige mich zur Zeit mit MySQLi und habe nun eine Frage, die ihr mir hoffentlich beantworten könnt.

    Meines Wissens ist es so, dass wenn man Prepared Statements verwendet (egal, welche Sprache / Datenbank), kein Escapen der Parameter mehr nötig ist, da die Parameter als eigenes Objekt angesehen werden, und nicht Bestandteil der eigentlichen Query sind.

    Nun sehe ich in Tutorials aber immer wieder bei Prepared Statements so etwas:

    z.B. von hier
    // Maskierende Slashes aus POST Array entfernen
    if (get_magic_quotes_gpc()) { $_POST = array_map( 'stripslashes', $_POST ); }
    $name    = $_POST['name'];
    $bereich = $_POST['bereich'];
    
    // ...
    
    $sql = 'INSERT INTO `moderatoren` (`name`, `bereich`) VALUES (?, ?)';
    $eintrag = $db->prepare( $sql );
    $eintrag->bind_param( 'ss', $name, $bereich );
    $eintrag->execute();

    Das verwirrt mich ein wenig. Sollte ich Parameter immer von Magic Characters befreien? Oder brauche ich das nur bei Insert-Statements? Oder ist es in dem Fall eigentlich eh unnötig?

    Ich hoffe, ihr könnt mir ein wenig Theorie-Nachhilfe geben :D

    lg
    Sincer
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. g****e

    In der Tat, es sollten alle slashes die hinzugefügt wurden irgendwo entfernt werden.

    Hintergrund ist der, dass alle Slashes als vollwertiges Zeichen in der Kette angesehen werden, und somit auch geltend sind. Außerdem sind prepared statements in sowas absolut sicher, da der SQL code beim Preparen quasi bereits compiliert wird, und nur mit variablen ergänzt wird. Du fügst nurnoch Werte in die Variablen ein mittels dem bind_param. Daher können die Zeichen nicht als zur Anfrage gehörend manipulierend wirken, sondern nur als Variable, was sie auch sind.

    Mach die Slashes alle weg, oder wenn du kannst, mach "magic_quotes" aus.

    Liebe Grüße
  4. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    Hey ;)

    ggamee schrieb:
    In der Tat, es sollten alle slashes die hinzugefügt wurden irgendwo entfernt werden.
    (...)
    Außerdem sind prepared statements in sowas absolut sicher, da der SQL code beim Preparen quasi bereits compiliert wird, und nur mit variablen ergänzt wird. Du fügst nurnoch Werte in die Variablen ein mittels dem bind_param. Daher können die Zeichen nicht als zur Anfrage gehörend manipulierend wirken, sondern nur als Variable, was sie auch sind.


    Also wie jetzt?
    Sind Prepared Statements absolut sicher, oder muss ich Usereingaben auf jeden Fall escapen? (Und wenn ja warum?)

    lg
    Sincer
  5. g****e

    Du musst die Usereingabe hier ausnahmensweise nicht escapen. Hier musst du einzig und alleine schauen ob sie die Form haben, die du willst (Emails zum Beispiel), wenn du per INSERT bestimmte Datensätze ablegen willst, wie emails, usernames nach bestimmten Muster oder so.
    Prepared Statements sind in diesem Fall eine Sicherung gegen SQL-Injections, die meines Wissens nach in keinster Weise umgangen werden kann. Von demher könntest du sogar:

    $stmt = $db->prepare('SELECT * FROM `test` WHERE id=?');
    $stmt->bind_param( 'i' , $_GET['id'] );
    $stmt->execute();


    Machen, und es wäre hier kein injecten möglich. Dementsprechend ist escapen unnötig.

    Liebe Grüße
  6. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    Alles klar, danke ;)

    Dann war ich eh richtig informiert... Wollte nur eine Bestätigung :)
    Ist ja voll irritierend, wenn's in machen Tutorials bei Prepared Statements trotzdem gemacht wird...

    Thx
    Sincer
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!