kostenloser Webspace werbefrei: lima-city


Lösung gegen SQL Inection

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    instantblood

    instantblood hat kostenlosen Webspace.

    HI,
    ich weis nicht ob ich richtig in diesem Forum ^^

    Also mein Problem liegt hier und zwar ich suche nach einer Lösung gegen SQL Inection also sodass es nicht Möglich ist das durchzuführen.

    Weil habe Angst das wer meine Seite hackt!!!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Verschoben ins richtige Forum.
    Support ist nur für Probleme rund um Lima-City da. :thumb:
  4. Autor dieses Themas

    instantblood

    instantblood hat kostenlosen Webspace.

    @motoernie danke für deine Hilfe, aber viel gebracht hat es mir leider nicht :(
  5. instantblood schrieb:
    @motoernie danke für deine Hilfe, aber viel gebracht hat es mir leider nicht :(


    Wo liegt denn das Problem?
    Wenn du für alle Daten die du in eine SQL-Abfrage einfügst, die von MySQL bzw. MySQLi zu Verfügung gestellten Escape Funktionen nutzt, sollte eine SQL-Injection nicht möglich sein.

    Man sollte seine Anwendung immer nach dem FIEO (Filter Input Escape Output) erstellen.

    Somit entgehst du die Möglichkeit von kleinen "Kids" gehackt zu werden, Profis suchen da schon Intensiver nach Injections und Exploids und nicht unbedingt nur bei dem PHP Script.

  6. Autor dieses Themas

    instantblood

    instantblood hat kostenlosen Webspace.

    Ich weis bloß nicht wo ich das Einfügen soll, denn ich habe Invision Power Board (http://www.invisionpower.com/)
  7. instantblood schrieb:
    Ich weis bloß nicht wo ich das Einfügen soll, denn ich habe Invision Power Board (http://www.invisionpower.com/)
    motoernie schrieb:
    Schau dir dazu http://de.wikipedia.org/wiki/SQL-Injection an, dort ist ganze gut erklärt. Vor allem den Abschnitt http://de.wikipedia.org/wiki/SQL-Injection#Gegenma.C3.9Fnahmen nicht vergessen zu lesen.

    Wenn du nicht weisst wie man solche Beispiele:
    Ein Beispiel für MySQL: anstatt

    $abfrage = "SELECT spalte1
    FROM tabelle
    WHERE spalte2 = '".$_POST['spalte2Wert']."'";
    $query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");

    sollte Folgendes verwendet werden:

    $abfrage = "SELECT spalte1
    FROM tabelle
    WHERE spalte2 = '".mysql_real_escape_string($_POST['spalte2Wert'])."'";
    $query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");
    Quelle: obiger wiki-link
    umsetzt solltest du vielleicht die Grundlagen von MySQL lernen.

    PS.: deinen Quellcode musst du schon selbst durcharbeiten.

    Beitrag zuletzt geändert: 11.3.2012 21:42:58 von motoernie
  8. motoernie schrieb:

    $abfrage = "SELECT spalte1
                FROM tabelle
                WHERE spalte2 = '".$_POST['spalte2Wert']."'";
    $query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");

    sollte Folgendes verwendet werden:
    $abfrage = "SELECT spalte1
                FROM tabelle
                WHERE spalte2 = '".mysql_real_escape_string($_POST['spalte2Wert'])."'";
    $query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");

    Quelle: 2. wiki-link von oben
    umsetzt solltest du vielleicht die Grundlagen von MySQL lernen.
    Dazu sage ich nur noch einmal "Filter Input Escape Output" Am besten ist es immer wenn du eine Zahl erwartest, das dort dann auch nur die Zahlen erlaubt sind, in dem entpechenden $_POST oder $_GET parameter.

    Wenn die Eingabe nur bestimmte Zeichen erlaubt, sollte geprüft werden ob auch wirklich nur diese Zeichen enthalten sind.

    instantblood schrieb:
    Ich weis bloß nicht wo ich das Einfügen soll, denn ich habe Invision Power Board (http://www.invisionpower.com/)
    Ich Würde mal tippen, du hast auch keine Ahnung von PHP richtig?

    In dem Fall können wir(oder vielmehr ich) dir keine Hilfestellung geben:
    1. Da ich weder das Forum je getestet noch verwendet habe oder werde.
    2. Wäre da am besten für dich der Entwickler / die Community die es verwenden oder dafür mod programmieren anzusprechen.
    3. Könntest du dich mit der PHP & MySQL Thematik auseinander setzen und ggf. später selber nach Sicherheitslücken in der selbst verwendeten Software suchen.


    Beitrag zuletzt geändert: 11.3.2012 21:44:47 von dexus85
  9. Autor dieses Themas

    instantblood

    instantblood hat kostenlosen Webspace.

    OK, danke an alle erstmal und besonders an dexus85
  10. Wie bereits schonmal gefragt, du selber hast keine Ahnung vom programmieren oder Datenbanken?
    Dann solltest du dir eventuell zumindest mal die Grundlagen anschauen, auch wenn es für deinen Fall sicher nicht ausreichend ist.

    Dein Board ist doch professionel erstellt worden oder?
    Dann brauchst du dir um sowas eigentlich keine Sorge machen, das meiste wird in Foren über die URL übergeben, das haben auch die Programmierer bedacht.

    Ansonsten schau dir mal http://php.net/manual/de/function.mysql-real-escape-string.php an.
    Ist sicherlich kein Wundermittel,hilft aber ein wenig ;)
  11. Morgen,

    das Thema wurde hier ja schon öfter angesprochen, bitte nutze daher die Suche,
    trotzdem ist es ein interessantes Thema.

    Viel Lesenswertes kannst du dir ergooglen, sowohl auf Englisch als auch Deutsch.

    Generell ein paar Dinge die immer beachtet werden sollten:
    * Du solltest prüfen ob die Eingabe dem richtigen Typ entspricht (Integer kann man dann einfach mit (int) casten bspw).
    * bei Strings sollte man mysql_real_escape_string verwenden
    * Traue niemals Eingaben, die vom Benutzer kommen, also immer prüfen.

    Vereinfacht wird dir das ganze Prozedere durch eine selbstgeschriebene/selbstkopierte MySQL Klasse,
    da sich alles für jede Abfrage wiederholt und es nervig ist, jedes mal die gleichen IFs zu schreiben...
    Dort kannst du dir bspw. Funktionen für das hinzufügen von Integern, Strings, etc schreiben.
    Über diese kannst du dann auch generell schneller und effektiver SQLs schreiben.

    Bsp von einem meiner Projekte:
    $mysql = FW_Mysql::getInstance();
    
    $mysql->assign('idinviteruser', $user->iduser);
    $mysql->assign_str('coupon', $code);
    $mysql->assign('credits', $credits);
    $mysql->insert($this->table);


    Meiner Meinung unerlässlich für größere Projekte.

    Beitrag zuletzt geändert: 13.3.2012 9:19:00 von sneppa
  12. sneppa schrieb:
    Morgen,

    das Thema wurde hier ja schon öfter angesprochen, bitte nutze daher die Suche,
    trotzdem ist es ein interessantes Thema.

    Viel Lesenswertes kannst du dir ergooglen, sowohl auf Englisch als auch Deutsch.

    Generell ein paar Dinge die immer beachtet werden sollten:
    * Du solltest prüfen ob die Eingabe dem richtigen Typ entspricht (Integer kann man dann einfach mit (int) casten bspw).
    * bei Strings sollte man mysql_real_escape_string verwenden
    * Traue niemals Eingaben, die vom Benutzer kommen, also immer prüfen.

    Vereinfacht wird dir das ganze Prozedere durch eine selbstgeschriebene/selbstkopierte MySQL Klasse,
    da sich alles für jede Abfrage wiederholt und es nervig ist, jedes mal die gleichen IFs zu schreiben...
    Dort kannst du dir bspw. Funktionen für das hinzufügen von Integern, Strings, etc schreiben.
    Über diese kannst du dann auch generell schneller und effektiver SQLs schreiben.

    Bsp von einem meiner Projekte:
    $mysql = FW_Mysql::getInstance();
    
    $mysql->assign('idinviteruser', $user->iduser);
    $mysql->assign_str('coupon', $code);
    $mysql->assign('credits', $credits);
    $mysql->insert($this->table);


    Meiner Meinung unerlässlich für größere Projekte.
    Mich würde ja mal deine MySQL Klasse interessieren.

    Für LIKE, GRANT oder REVOKE sollte man auch noch % und _ escapen (addslash), wobei die meisten wohl eh nur ersteres nutzen.

    Cast kann man auch mit intval eigentlich sollte, man sich wirklich mal die gesamte php.net durchlesen, da ist viel wissen drin was Sicherheit angeht.
  13. technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    Also, wenn du wirklich alles absichern möchtest, dann solltest du das ganze so machen:

    mysql_real_escape_string(htmlentities(isset($_GET['ct']) ? $_GET['ct']: NULL, ENT_QUOTES, "utf-8"))


    Damit werden erst mal alle MySQL-Relevanten Befehle ausgeschaltet und dazu auch noch HTML-Eingaben, mit denen dann ein kiddi z.B. eine metaweiterleitung baut, die z.B. zu einer Pornoseite führt. Damit der Server so wenig Fehler wie möglich verursacht mit denen besser gebildete "Hacker" das Script knacken können, ist dann der teil ab isset da. Das ganze hat nicht nur einen Sicherheitsaspekt, sondern dient auch noch der Performance, denn jeder Fehler - und sei er noch so gering - braucht Speicher und ob du es glaubst oder nicht, der Browser bekommt diese Fehler zu spüren, ob die nun ausgegeben werden oder nicht.
    Ich zumindest sichere alle meine Eingabebereiche so ab.
  14. Ich verwende dazu folgende Funktion:

    function getString($string)
    	{
    		return strip_tags(stripslashes(str_replace(array('\'', '"', '`', '´'), '', $string)));
    	}


    Da wird xss auch gleich rausgefiltert.
  15. 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!