SQL-Injection

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

  • Smartsoul
    antwortet
    THX für die Hilfe!

    Bitte um Nachsicht, wenn meine Probleme nicht sehr anspruchsvoll sind. Bin zwar schon [COLOR=crimson]"Junior Member"[/COLOR] hier, aber nach wie vor ein ziemliches Greenhorn.

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    Original geschrieben von Smartsoul
    Das heisst du würdest es so machen?
    PHP-Code:
    $name mysql_real_escape_string($_POST['name']);
    $vorname mysql_real_escape_string($_POST['vorname']);
    //usw. 
    Entweder so - oder gleich die Funktion im Zusammenbau meines Query-Strings einsetzen.

    Einen Kommentar schreiben:


  • Smartsoul
    antwortet
    Original geschrieben von wahsaga
    Ich halte es nicht für angebracht, weil man ja die POST-Daten evtl. noch für was anderes braucht, als nur für die Verwendung in einer MySQL-Query.
    Das heisst du würdest es so machen?

    PHP-Code:
    $name mysql_real_escape_string($_POST['name']);
    $vorname mysql_real_escape_string($_POST['vorname']);
    //usw. 
    Dabei müssten doch die $_POST Daten erhalten bleiben.

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    Original geschrieben von icecream
    Und bei der Ausgabe falls HTML unerwünscht ist z.B.:
    addslashes() oder htmlentities()...
    addslashes ist Nonsense in so einem Falle.

    Original geschrieben von Smartsoul
    Würde gerne wissen, ob ich [...] das ganze Array $_POST auf einmal mit mysql_real_escape_string bearbeiten kann?
    Wenn du das für angebracht hältst, kannst du das.

    (Ich halte es nicht für angebracht, weil man ja die POST-Daten evtl. noch für was anderes braucht, als nur für die Verwendung in einer MySQL-Query.)
    Analog dazu das ganze Array mit htmlspecialchars()
    Noch mal: HTML entschärfst du sinnvoller Weise, bevor du die Daten an den browser ausgibst.
    Der Datenbank ist HTML vollkommen egal, für die ist das nur Text - also lasse diesen beim Abspeichern so, wie er ist (ausgenommen natürlich maskieren).

    Einen Kommentar schreiben:


  • Smartsoul
    antwortet
    Würde gerne wissen, ob ich z.B. anstatt
    PHP-Code:
    $name mysql_real_escape_string($_POST['name']);
    $vorname mysql_real_escape_string($_POST['vorname']);
    //usw. 
    das ganze Array $_POST auf einmal mit mysql_real_escape_string bearbeiten kann?

    Analog dazu das ganze Array mit htmlspecialchars()

    Einen Kommentar schreiben:


  • Smartsoul
    antwortet
    Um htmlspecialchars() auf alle Elemente in $_POST anzuwenden.

    Einen Kommentar schreiben:


  • icecream
    antwortet
    Du solltest beim Eintrag in die Datenbank so machen:
    mysql_real_escape_string($eingabe);

    Und bei der Ausgabe falls HTML unerwünscht ist z.B.:
    addslashes() oder htmlentities()...

    Gruß
    icecream

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    Original geschrieben von Smartsoul
    Etwa so?
    PHP-Code:
    $_POST array_map(htmlspecialchars($_POST)); 
    Nein, wozu?

    Einen Kommentar schreiben:


  • Smartsoul
    antwortet
    @ highrise

    danke für deine ausführliche Erklärung. War allerdings schon soweit klar. Aber schön, dass es jetzt hier nochmal so deutlich steht.

    Sorry, wenn ich hier verschiedene Fragen vermischt habe.

    Habe den Titel des Threads geändert.
    Zuletzt geändert von Smartsoul; 07.04.2006, 14:02.

    Einen Kommentar schreiben:


  • highrise
    antwortet
    am thema vorbei:

    soo wir reden hier über sql injects?
    was zum henker hat html-code damit zu tun... *kopfschüddel*

    kurz zur Problematik:

    Ein SQL Inject ist der Versuch, mittels Formular illegal die datenbank zu füttern. Das hat nichts damit zu tun, dass jemand html-code reinschreibt. Das kann ja unter gewissen umsänden sogar erwünscht sein.

    nein, vielmehr geht es darum, datensätze zu manipulieren oder eigentlich geschützte datensätze auszulesen, indem man geschickt formulierte SQL-Statements per Formular übergibt.

    so könnte man zum beispiel bei einem login eine manipulation versuchen:

    nehmen wir an, wir wollen nach dem login folgendes tun:

    SELECT id FROM users WHERE (email='$_POST[email]') AND (password='$_POST[password]')

    der böswillige user würde nun versuchen, die tatsache, dass die daten email und password in der sql-query vorhanden sind, für seine zwecke auszunutzen und eine innere query zu starten..

    er könnte zum beispiel dort folgendes statement als password eingeben:
    x' OR password<>'x

    okay.. zugegebn .. ganz billiger versuch und vermutlich auch nicht wirklungsvoll, aber ich mag jetzt nicht über escapes und anführungszeichen nachdenken. In der realität geht es so nicht, sondern musss chon etwas cleverer angestellt werden.

    theoretisch würde das aber (wenn man die escapezeichen uns sonderzeichen bei den ' mal außen vor lässt zu folgender query führen:

    SELECT id FROM users WHERE (email='irgendwer@irgendwas.de') AND (password='x' OR password<>'x')

    soo.. und schwupps kann ich mich als jeder einloggen, von dem ich nur die emailadresse kennen, denn das passwort wird in jedem fall gleich oder ungleich meiner zeichenfolge sein.

    davor gilt es sich zu schützen...

    das sollte die eigentlich thematik sein, und nicht die frage, darf mein kleiner user HTML verwenden..
    au weia, wie schlimm..

    greetz, high

    Einen Kommentar schreiben:


  • Smartsoul
    antwortet
    Und darauf fällt dir mit ein wenig eigenem Nachdenken keine sinnvolle Antwort ein ...?
    War der Meinung das "ja" die richtige Antwort sei, aber ich war mir nicht sicher, deshalb die in deinen Augen wahrscheinlich dumme Frage.

    Warum nicht ein einfaches htmlspecialchars()?
    Etwa so?

    PHP-Code:
    $_POST array_map(htmlspecialchars($_POST)); 


    Absichern für MySQL beim Eintragen in MySQL.
    O.K. Verstanden!

    Absichern für die Ausgabe bei der Ausgabe.
    Ausgabe wohin? Bei der Ausgabe von Daten aus der DB?

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    Re: SQL-Injection

    Original geschrieben von Smartsoul
    Frage 1: Muss ich alle Dateneingaben aus Formularen, die ich in die DB übernehmen will so schützen?
    Und darauf fällt dir mit ein wenig eigenem Nachdenken keine sinnvolle Antwort ein ...?
    Ich habe gestern etwas gefunden, dass die Eingabe von HTML in Formularfeldern so unterbindet:
    strip_tags habe ich schon immer für Mist gehalten.
    Warum nicht ein einfaches htmlspecialchars()?

    Frage 3: Macht das überhaupt Sinn, diese beiden Sachen miteinander zu verbinden.
    Nein, zumindest nicht auf diese Weise.

    Absichern für MySQL beim Eintragen in MySQL.
    Absichern für die Ausgabe bei der Ausgabe.

    Einen Kommentar schreiben:


  • Smartsoul
    hat ein Thema erstellt SQL-Injection.

    SQL-Injection

    Hallo Leute,

    dies ist ein gemischtes SQL-PHP-Post. Falls ich es jetzt in der falschen Kategorie haben sollte, bitte verschieben.

    O.K. here we go ...

    Wenn ich das damals richtig verstanden habe, ist dies
    PHP-Code:
    mysql_real_escape_string($_POST['username']) 
    eine Maßnahme gegen eine SQL-Injection.

    Frage 1: Muss ich alle Dateneingaben aus Formularen, die ich in die DB übernehmen will so schützen?

    und weiter ...
    Ich habe gestern etwas gefunden, dass die Eingabe von HTML in Formularfeldern so unterbindet:
    PHP-Code:
    // ALWAYS clean the POST variables of any HTML tags first.
    // And here we do it in one easy step.
    $_POST array_map('strip_tags'$_POST); 
    Jetzt würde ich das gerne miteinander verbinden.
    Falls Antwort auf Frage 1 = ja

    Frage 2: Kann ich das so machen?
    PHP-Code:
    $_POST array_map('strip_tags'mysql_real_escape_string($_POST)); 
    Frage 3: Macht das überhaupt Sinn, diese beiden Sachen miteinander zu verbinden.

    Für eure weisen Antworten wie immer dankbar
    Zuletzt geändert von Smartsoul; 07.04.2006, 14:01.
Lädt...
X