Prepared Statement vs. escape

  • Hallo.


    Was ist der Vorteil von prepared statements vs mysql_real_escape_string im zusammenhang mit Injections?
    was ist performanter?
    was ist sicherer?


    kann man eine technologie ausschließen?



    lg

  • Hm, gute Frage. Beide verfahren schliessen bei einer brauchbaren Implementation eine konventionelle Injection eigentlich zu nahezu 100% aus, vom Sicherheitsaspekt würde ch aber trotzdem sagen, dass Prepared Statements, ob jetzt mit mysqli oder PDO oder was immer du verwendest, tendenziell etwas sicherer sind. Sie sind auf jeden Fall einfacher zu handhaben, wobei eine Validierung von Usereingaben natürlich trotzdem noch nötig ist, um auch gegen XSS und ähnliche Angriffe geschützt zu sein, dabei kann man sich gleichzeitig auch um das Escaping kümmern. Ist daher wohl ein bisschen eine Glaubensfrage.


    Was die Performance angeht, sind Prepared Statements bei mehreren Operationen minim schneller, da die Query nur einmal geparsed weden muss, wobei der Gewinn marginal ist. Die grössten Performancegewinne in der Datenbank erhält man halt durch sinnvolles Tabellendesign.


    Wie oft hängt es also in erster linie nicht von der verwendeten Technologie, sondern von der Qualität der Implementation ab.

  • Bei Prepared Statements werden Query und Werte für die Platzhalter getrennt zum Server geschickt. Damit ist man 100% sicher gegen SQL-Injection, da die Werte niemals in einen Kontext geraten können, in dem sie interpretiert würden.


    Beim escapen kann rein theoretisch etwas schief laufen, da die Werte direkt im Query stehen und somit mitinterpretiert werden. Es wäre mir allerdings neu, dass die entsprechenden escape-Methoden von MySQLi/PDO Lücken hätten.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook