kostenloser Webspace werbefrei: lima-city


Wie schütz man sich richtig vor einer SQL Injection

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    project-x-beta

    project-x-beta hat kostenlosen Webspace.

    Guten Tag,
    Ich denke jeder weiß was eine SQL Injection ist, jedoch weiß ich nicht wie man sich davor schütz.
    Ich weiß dass mysql_real_scape_string helfen soll, aber ich habe gehört dass, das zu wenig ist.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. g****e

    Die sicherste Variante ist in meinen Augen prepared Statements zu nutzen. Da du sowieso auf MySQLi oder PDO setzen musst, da MySQL selbst als API decrepated ist (wird das so geschrieben?), wäre mein Rat: Wechsel auf MySQLi und schau dir prepared Statements an. Mit diesen bist du sicher, und wenn du dich an diese hälst gibt es keine SQL Injections mehr an sich. Nurnoch XSS oder ähnliches, aber keine SQL Injection mehr.

    Liebe Grüße
  4. ggamee schrieb:
    ..., da MySQL selbst als API decrepated ist (wird das so geschrieben?), wäre mein Rat: Wechsel auf MySQLi und schau dir prepared Statements an. ...
    geschrieben wird es deprecated. wo hast du bitte das gelesen? bitte quelle/URL dazu hier posten. nichts gegen mysqli, aber das ding ist nicht sicherer, sondern nur objektorientiert ;)
  5. g****e

    czibere schrieb:
    ggamee schrieb:
    ..., da MySQL selbst als API decrepated ist (wird das so geschrieben?), wäre mein Rat: Wechsel auf MySQLi und schau dir prepared Statements an. ...
    geschrieben wird es deprecated. wo hast du bitte das gelesen? bitte quelle/URL dazu hier posten. nichts gegen mysqli, aber das ding ist nicht sicherer, sondern nur objektorientiert ;)

    Einfach von php.net: http://www.php.net/manual/en/function.mysql-connect.php
    This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:


    Liebe Grüße
  6. ggamee schrieb:
    ... Einfach von php.net: http://www.php.net/manual/en/function.mysql-connect.php
    This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
    ok :-D
    man muss sagen! die burschen bei php arbeiten flott. auf der mysql_connect() steht
    Last updated: Fri, 01 Mar 2013
    (ich habe die seite zuletzt ... uch ... mann ... also ewig nicht mehr gesehen :wow:) und alle anderen mysql_* befehle sind demensprechend präpariert!

    trotzdem. mysqli ist nicht sicherer (wenn du mysql richtig machst)! summa summarum, wenn es angedroht ist, sollte man sich danach richten!

    der könig ist tot, es lebe mysqli ;))
  7. r********e

    Zu diesem Thema gibt es doch unendlich viel schon im Netz.
    http://lmgtfy.com/?q=mysql+injection+verhindern liefert jedenfalls einiges an Treffern und ich erinnere mich, dass da schon auf der ersten Ergebnisseite einiges war, was mir in meinen Anfängen viel geholfen hat.

    Viel ist nichtmal nötig, um sich einigermassen wirkungsvoll abzusichern und mit dem Thema sollte sich eigentlich jeder mal einigermassen beschäftigt haben, der mysql nutzt.

    Viel Erfolg!
  8. tee

    Moderator Kostenloser Webspace von tee

    tee hat kostenlosen Webspace.

    czibere schrieb:
    trotzdem. mysqli ist nicht sicherer (wenn du mysql richtig machst)! summa summarum, wenn es angedroht ist, sollte man sich danach richten
    Wie wäre es denn mit einem Beitrag der dem eigentlichen Thema dieses Threads dient? Der Benutzer hat danach gefragt, wie er sich gegen Injections absichern kann, vielleicht kannst du dazu ja ein zwei Worte verlieren, wenn du dich ja scheinbar gut damit auskennst.

    Auf eine Dokumentation zu verweisen ist ein einfaches Mittel um jemandem zu helfen, aber manchmal ist es für Einsteiger einfacher verständlich, wenn man Ihnen ein Beispiel macht oder die wichtigsten Punkte kurz zusammen fässt. Die einzelnen Befehle kann derjenige dann ja selber recherchieren.

    Es mag sein, dass du mit Befehlen wie mysql_real_escape_string() einen Teil des erwünschten Nutzens erlangen kannst, aber du solltest weiterhin einfache Regeln beachten, wie auf die Datenbank nur die maximal nötigen Rechte zu vergeben.

    Etwas genauer ist das hier beschrieben, mit einigen Punkten an die man bezüglich der Sicherheit denken sollte:
    http://www.pc-erfahrung.de/sonstiges/webdesignwebentwicklung/mysql-injection-und-datenmanipulation-verhindern.html

    MfG T
  9. g****e

    Um dir die Prepared Statements leichter zu machen, kannst du auf meinem Blog mal vorbeischauen:
    http://sateffen.bplaced.net/programmierung/prepared-statements-mit-mysqli.html
    http://sateffen.bplaced.net/programmierung/mysqli-vom-prepared-statement-zum-result.html
    Wenn du Rechtschreibfehler oder so findest, immer her damit. Ich hoffe, das bietet einen kleinen vernünftigen Einstieg, wie man Injections verhindern kann.
    Der Trick bei prepared Statements, falls es dich interessiert, ist, dass das SQL bereits vorher kompiliert wird, mit einer oder mehreren Variablen anbei. Diese Variable wird erst gesetzt, wenn du die Query wirklich ausführst. Dadurch wird der Variableninhalt nicht mit kompiliert, und kann somit auch kein Schadcode übersetzen oder einschleusen.
    Grober Ablauf also immer:
    - prepare query
    - bind param's
    - execute statement/query
    Siehst du in den verlinkten Artikeln auch.

    Liebe Grüße
  10. Ich danke euch für die Antworten und eine Frage habe ich noch, ist Mysqli schneller/sicherer als mysql?
  11. m****r

    infinitywar schrieb:
    Ich danke euch für die Antworten und eine Frage habe ich noch, ist Mysqli schneller/sicherer als mysql?


    Auf prepared Statements bezogen: Ja, wenn du den einmal vorbereiteten Ausdruck mehrfach ausführen möchtest (und prepared Statements willst du ja glaube ich verwenden, um SQL-Injections auszuführen). Willst du hingegen dein Statement nur einmal in die DB eintragen, so ist es etwas langsamer, da an die DB ja zwei Abfragen geführt werden: 1. Prepare und 2. Execute.

    Ich meine mich aber auch erinnern zu können, dass mysqli allgemein schneller läuft (hier bin ich mir aber nicht so sicher)!
  12. 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!