SQL Statement in php mit Variable

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von tennessee, 22.08.2008.

  1. #1 tennessee, 22.08.2008
    tennessee

    tennessee Linuxfan

    Dabei seit:
    22.04.2006
    Beiträge:
    134
    Zustimmungen:
    0
    Hallo zusammen,

    hat jemand ne Idee warum das so nicht funktioniert? ?(

    PHP:
    $id=$_REQUEST['id'];
    $sql 'Select html_text FROM cms WHERE id = "'.$id.'" ';
    Wenn Ich die id hart codiert reinschreibe klappts.
    Irgendwie muss es wohl ein " ' Fehler sein so das die where Bedingung nicht funktioniert.

    ID an sich wird über das Formular gefüllt da ein Schreibvorgang auch geht.

    :hilfe2:
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 daboss, 22.08.2008
    Zuletzt bearbeitet: 22.08.2008
    daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    ich würd anders "anführungsstricheln":
    Code:
    [COLOR=#000000][COLOR=#0000bb]$sql [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#dd0000]"Select html_text FROM cms WHERE id = "'[/COLOR][COLOR=#0000bb]$id[/COLOR][COLOR=#dd0000]'"[/COLOR][COLOR=#007700];
    [/COLOR][/COLOR]


    Was kommt den fürn Fehler?
    Die $id ist auch wirklich initialisiert?

     
  4. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Die Shell kann innerhalb von Singlequotes nichts "lesen", also interpretiert die Shell "'$id'" als "$id" und nicht als den Variableninhalt, wie gewünscht.
    Lass die "'" weg.
     
  5. Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Ersteinmal: Du hast dir da eine SQL-Injection-Lücke eingebaut. Verwende am besten mysql_real_escape_string() oder caste - da du hier ja nur einen Integer-Wert brauchst - nach int:
    PHP:
    $id = (int)$_REQUEST['id'];
    Zu deinem Problem: Was für ein Fehler wird denn von MySQL ausgegeben? Du verkettest eigentlich korrekt... Allerdings würde ich zur besseren Unterscheidung MySQL-Befehle wie SELECT groß schreiben, das dürfte mit deinem Problem allerdings nichts zu tun haben.
    Du kannst versuchen, $id innerhalb des SQL-Statements in einfache Anführungsstriche zu setzen:
    PHP:
    $sql 'SELECT html_text FROM cms WHERE id = \''.$id.'\'';
    Versuche auch einmal, die Anführungsstriche ganz wegzulassen, also:
    PHP:
    $sql 'SELECT html_text FROM cms WHERE id = '.$id;
    Grüße,

    Tblue
     
  6. #5 saeckereier, 22.08.2008
    Zuletzt bearbeitet: 22.08.2008
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Nette Antwort aber imRuby, PHP, Perl, ... Unterforum an falscher Stelle.
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Oder benutze prepared Statements bei denen sich der Treiber ums Escapen kümmert, dann ist das sogar DB unabhängig. Warum nur weiss das immer keiner...
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Ach so, das Ursprungsproblem ist, dass in SQL Abfragen Singlequotes bneutzt werden müssen, du hast oben als Beispiel das hier konstruiert:
    Code:
    SELECT html_text FROM cms WHERE id = "000"
    
     
  7. Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Stimmt, das ist auch eine Möglichkeit (ich kenne und verwende prepared Statements, allerdings erst seit kurzem, deswegen ist mir das nicht eingefallen. Notiere ich mir fürs nächste Mal ;)).
     
  8. #7 uzumakinaruto, 22.08.2008
    uzumakinaruto

    uzumakinaruto Tripel-As

    Dabei seit:
    23.05.2008
    Beiträge:
    246
    Zustimmungen:
    0
    Ort:
    Gifhorn
    PHP:
    $id $_POST['id'];
    # oder
    $id $_GET['id']
    # niemals $_REQUEST .. dann kann immer noch einer mit post oder get kommen und etwas verändern ;)
    # immer genau angeben, wie die daten ankommen.

    // Anfrage erstellen
    $query sprintf("SELECT html_text FROM cms WHERE id=%s"mysql_real_escape_string($id));
    Code:
    # abfrage bei zahlen
    SELECT * FROM table WHERE id = 1;
    # abfrage bei strings(zeichenketten)
    SELECT * FROM table WHERE name = 'String';
    
     
  9. #8 saeckereier, 22.08.2008
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Code:
    # niemals $_REQUEST .. dann kann immer noch einer mit post oder get kommen und etwas verändern ;)
    # immer genau angeben, wie die daten ankommen.
    
    Und? Das ist nun wirklich kein Schutz. Wenn der Angreifer manipulieren will, macht das keinen Unterschied. Ob GET oder POST die Daten werden immer alle vom Client gesendet und können beliebig manipuliert werden.
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 uzumakinaruto, 22.08.2008
    uzumakinaruto

    uzumakinaruto Tripel-As

    Dabei seit:
    23.05.2008
    Beiträge:
    246
    Zustimmungen:
    0
    Ort:
    Gifhorn
    jep .. aber der angreifer kann solange versuchen mit get was zu drehen, wenn nur post benutzt wird und dementsprechend auch der source-code geschrieben wurde ;)

     
  12. #10 saeckereier, 23.08.2008
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Naja, ich seh da eben weiterhin keinen Sinn drin. Das Ziel muss sein sichere Software zu entwickeln. Maßnahmen, die die Tragweite von übersehenen Fehlern effektiv reduzieren mögen da auch ok sein, aber das hier ist ein so minimaler Effekt, dass ich glaub ich der Bequemlichkeit halber bei $_REQUEST bliebe. Wer weiß ob ich das später sogar mal nutzbringend verwenden kann.
     
Thema:

SQL Statement in php mit Variable

Die Seite wird geladen...

SQL Statement in php mit Variable - Ähnliche Themen

  1. alias in if statement beim ersten Mal nicht erkannt

    alias in if statement beim ersten Mal nicht erkannt: Hallo, ich möchte einige Bash-Befehle in einer Zeile ausführen: if ! which bla ; then alias bla='ls' ; echo hi ; fi ; alias ; bla...
  2. Hilfe! Mit Datenbank verbinden und Statements ausführen.

    Hilfe! Mit Datenbank verbinden und Statements ausführen.: Liebe Community, Ich brauche dringendes eure Hilfe. Ich bin Praktikant bei der Telekommunikationsfirma [Name entfernt]. Ich bin nun die 3. Woche...
  3. % in SQL Statement

    % in SQL Statement: Hallo Ich will in Perl folgende Abfrage starten: $dbh->prepare ("SELECT * FROM tabelle where dateiname = 'name.%.txt';")Funktioniert aber...
  4. (AufAbwegen) - MSSQL Server Statement - Syntax

    (AufAbwegen) - MSSQL Server Statement - Syntax: Hallo Gemeinde, ich bin auf Abwegen und brauche "mal eben" ein MSSQL Statement, ich habe das ganze schon so lange nicht mehr gemacht das ich auch...
  5. Tabelle aus SQL-Statement filtern

    Tabelle aus SQL-Statement filtern: hallo zusammen ich möchte aus einem übergebenen sql-statement (parameter eines shell scripts) die angegebene tabelle herausfiltern, da ich diese...