Sonderzeichen z.B.: ` in MySQL Textfeld schreiben

  • Hallo,

    ich schreibe aus einem Array Werte in eine MySQL-Tabelle. Dies Funktioniert, aber wenn das Sonderzeichen ' im Text enhalten ist leider nicht. Andere Sonderzeichen habe ich noch nicht getestet.

    Text ist z.B.: abc'25

    In diesem Fall wird der Datensatz nicht geschrieben.

    Daher meine Frage wie ich das Problem lösen kann

    Verbindung erfolgt mittels UDF Verbindung, von ProgAndy (hoffe habe ide Verbindungsart richtig geschrieben, es ist nicht ODBC)

    Danke für eure Hilfe

    [autoit]

    $query= "UPDATE Weltkarte"
    $query = $query & " SET `Reserviert_von` = NULL, `Reserviert` = NULL, `Reserviert_DatUhrzeit` = NULL, `txt1` = '" & $S_Array[1] & "', `txt3` = '" & $S_Array[3] & "', `txt2` = '" & $S_Array[2] & "', `Status` = '" & $S_Array[4] & "',"
    $query = $query & " `Stadt` = '" & $S_Array[5] & "', `txt6` = '" & $S_Array[6] & "', `txt7` = '" & $S_Array[7] & "', `Update_von` = '" & $F_User & "', `Update_DatUhrzeit` = Now(), `IP` = '" & $S_IP & "', `MAC` = '" & $S_Mac & "'"
    $query = $query & " WHERE `AutoID` = '" & $S_Array[0] & "';"

    [/autoit]

    Einmal editiert, zuletzt von ghostwritter (24. Mai 2012 um 07:20)

  • Hi,
    Strings musst du durch _MySQL_real_esape_string maskieren, damit die Zeichen fehlerfrei übertragen werden. Für Ganzzahlen einfach Int($zahl) verwenden.

  • Hallo,

    danke für die schnelle Antwort.

    Gedanklich fehlt mir noch etwas um deinen Ratschlag umsetzen zu können.

    Ich bekomme einen Text. In dem hat sich der User frei entfaltet. Das bedeutet im Text kann ein String enthalten sein, muß aber nicht. Außerdem ist die Stelle wo er sich befindet auch Variabel.

    Mein Ansatz wäre jetzt:

    [autoit]

    If StringRegExp($FeldDat_Array[3], ''') Then
    $FeldDat_Array[3] = mysql_real_escape_string(&mysql,$FeldDat_Array[3] ,$Laenge)[

    [/autoit]

    stimmt der code? vor allem drei '

    Wie kann ich dieLänge des Textex im Array in Autoit auslesen?

    Und vor allem die Wichtigste wie baue ich das im SQL-Code ein? Kann ich auch mit mysql_real_excape_string Text welchen keinen String im Text enthält?

    Den dort wird das Array für Text mit String flankiert. Dies dürfte mit mysql_real_escabe_string nicht sein oder?

    Ich möchte mich bei ProgAndy bedanken vor allem für seiner Homepage und Beiträge, sowie bie alle andern hier im Forum, denn dadurch habe ich schon sehr viel gelernt.

    Einmal editiert, zuletzt von ghostwritter (23. Mai 2012 um 20:34)

  • Hier ein Beispiel:

    [autoit]

    $uid = "SELECT something FROM mytable WHERE sometext='" & _MySQL_Real_Escape_String($MysqlConn,$sometext) &"' AND someint=" & Int($someint)

    [/autoit]
  • MySql_Real_Escape_String sollte man auf jedenfall IMMER anwenden, wenn der user eine eingabe macht, denn sonst kann er einem leicht eine SQL-Injection unterschieben
    was vorallem bei Online datenbanken große gefahr birgt

    [autoit]


    $pw = "123"
    $id = "Krabat"
    $uid = "SELECT * FROM usertable WHERE (username like '" & $id & "' AND passwort like '" & $pw & "')"

    [/autoit]


    das wäre jetzt eine art login die ungesichert ist aber mit normalen user eingaben funktioniert

    doch gibt man jetzt was anderes als passwort ein kann man es leicht hacken

    [autoit]


    $pw = "' OR id like '1'"
    $id = "total irrelewant was hier steht"
    $uid = "SELECT * FROM usertable WHERE (username like '" & $id & "' AND passwort like '" & $pw & "')"

    [/autoit]


    daraus würde dann folgender string entstehen

    SQL
    SELECT * FROM usertable WHERE (username like 'total irrelewant' AND passwort like '' OR id like '1')


    das OR würde hier gewinnen und man wäre mit der user ID 1 drinn
    natürlich muss die ID nicht unbedingt id heißen aber das ist bei der angriffs theorie nebensache :)

    und durch dein ' kommt es zum Fehler du schließt mit dem Sonderzeichen ' den mysql syntax unabsichtlich und dadurch entsteht ein string wo text an einer stelle steht wo kein text sein sollte und nix geht mehr ;)
    und hier als beispiel: als username wird wie'gehts eingegeben

    SQL
    SELECT * FROM usertable WHERE (username like 'wie'gehts' AND passwort like 'irgentwas halt')


    der syntax ist hier jetzt total verpfuscht und hinüber

    _MySQL_Real_Escape_String wir dann jeden MySQL Syntax in dem String maskieren wodurch so etwas nicht passieren kann und eine SQL Injection nicht mehr funktioniert
    also immer einbauen! ;)

    so, das war ein bissen sicherheitsrelevantes off-topic & eine erklärung, warum das passiert :)

    mfg

    4 Mal editiert, zuletzt von Krabat (23. Mai 2012 um 22:33)

  • Danke für die Antworten.

    Konnte dank des Beispieles das Problem lösen.

    Außerdem bedanke ich mich für das Beispiel betreffend Sicherheitsrisiko. Von dieser Seite habe ich es noch nicht betrachtet, ist aber logisch und dank des Beispieles auch greifbar und verständlich.