PHP+MSDE - Wie hochkommatas/Anführungszeichen setzen?

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

  • PHP+MSDE - Wie hochkommatas/Anführungszeichen setzen?

    Hallo,

    ich habe ein PHP Script das aus einer MSDE SQL Datenbank Rechnernamen sucht.
    Nach erfolgter Suchanfrage (z.B alle Rechner die mit FE* beginnen (FE124)) biete ich die möglichkeit zum Sortieren an (z.B nach Besitzer). Hierzu nehme ich das alte Query und hänge ein ORDER BY Besitzer DESC dran. Problem an der Sache: Jedesmal wenn ein Hochkommata ' im alten Query vorkommt wird das Query unterbrochen.

    So sieht z.B ein Query aus (Man beachte die Hochkommatas)
    PHP-Code:
    $db_qry.="SELECT Rechnername, Bestellnummer ";
    $db_qry.="FROM tbl_rechner ";

    if(!empty(
    $value_rechnername)){
    $db_qry.="WHERE Rechnername LIKE '%$value_rechnername%' "// HIER ist das erste Hochkommata

    Hier das PHP dazu:
    PHP-Code:
    if($order!=""){
     
    $db_qry=$old_qry;
     
    $query mssql_query("$db_qry ORDER BY $order"); 
    }
    else{
     
    $query mssql_query("$db_qry ORDER BY Rechnername");

    Übergeben wird natürlich per abfrage.php?old_qry=$db_qry&order=Besitzer


    Wer weiß wie man die Hochkommatas, Anführungszeichen oder Gänsefüsschien setzten muss damit mein POST an den Browser nicht bei
    ...old_qry=SELECT Rechnername, Bestellnummer FROM tbl_rechner WHERE rechnername LIKE
    abbricht??

    Für jede Hilfe dankbar ist
    qualleonline


    PS: Das Script ist natürlich viel größer. Auch die Abfrage. Habs stark vereinfacht.

  • #2
    Wenn du über die URL nen SQL-Befehl übergeben lässt und den ausführst, kann ich dir jeden beliebigen Befehl einschleusen und dir damit z.B. deine AdminPWs auslesen.
    Oder z.B. einfach deine komplette Datenbank leerräumen.

    Das letzte, was du tun darfst, ist darauf zu vertrauen dass Daten, (egal ob per POST / GET / COOKIE), die vom Benutzer kommen, NICHT infiziert mit schadcode sind! Das wäre sonst töricht
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Klar hab ich an die Sicherheit gedacht.
      A: Das Ganze Script ist nur Intern (2-3 Leute haben zugriff)
      B: Der Login wird per $_SESSION gesichert und jede seite prüft ob der Login noch ok ist.
      C: Passwörter stehen nicht in der DB.


      Aber meine Frage war ja eine ganz andere...

      Kommentar


      • #4
        Wer weiß wie man die Hochkommatas, Anführungszeichen oder Gänsefüsschien setzten muss damit mein POST an den Browser nicht bei
        ...old_qry=SELECT Rechnername, Bestellnummer FROM tbl_rechner WHERE rechnername LIKE
        abbricht??
        Du kannst nix an den Browser posten. Ich verstehe auch einfach dein Problem nicht.


        Und mal so als Anekdote: Auch bei Microsoft hat sich mal ein Administrator gedacht "Hey, ich bau mir mal nen kleines Adminscript, muss ja nicht sicher programmiert sein, kleiner Login und fertig. Das nimmt mir dann viel Arbeit ab!" - microsoft.com sah dann recht schnell "etwas" anders aus

        Die Art und Weise wie du sie machst ist einfach nicht erstrebenswert. Soetwas anzugewöhnen ist gefährlich...

        Das ist vergleichbar mit include($_GET['page']); .... enormes Sicherheitsrisiko halt.

        Und nochwas: Schau dir mal register_globals an. Nurmal so als kleiner Tip



        Wenn du dann jetzt dein Problem nochmal verständlich erklärst antworte ich dir auch auf deine Frage und gebe nicht nur Tips & Hinweise
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #5
          Hi,

          ich glaube zwischen dem letzten Hochkomma und der Order-By-Klausel ist kein Leerzeichen - deshalb tritt der Fehler auf ... mach mal ne Testausgabe vom SQL-String.

          BTW: du kannst das auch als gespeicherte Prozedur auf den Server legen - dann brauchst du nur noch die Parameter übergeben.

          Kommentar


          • #6
            @quale, es mag ja sein, dass nur 3 User drauf zugreift und Loginzustand geprüft wird, aber der eingeloggte User kann dennoch absichtlich deine DB schaden. Such mal nach SQL-Injection.

            Kommentar


            • #7
              Shurakai: Ja, les ich mir mal durch. Jedoch ist dieses Script, anders als bei MS nur INTERN. Es besteht überhaupt keine Verbindung ins WWW.

              Das Problem das ich habe steht hier:

              index.php?old_qry=SELECT Rechnername, Bestellnummer FROM tbl_rechner WHERE rechnername LIKE

              So und dann ist der Post zuende. So sollte es z.B aussehen:

              index.php?old_qry=SELECT Rechnername, Bestellnummer FROM tbl_rechner WHERE rechnername LIKE '%FE%' ORDER BY Benutzer



              Patrick_PQ:
              Werd ich probieren.

              Kommentar


              • #8
                asp2php:

                Das hier?
                http://www.aspheute.com/artikel/20011030.htm

                Kommt auch in die Favouriten zum durchlesen.



                Seht mich bitte nicht als sicherheitsschlamper aber das Script soll nutzen bringen, und keiner dieser 3 leute wird es missbrauchen. Warum auch?
                Natürlich sehe ich ein das Scripte, die an die öffentlichkeit gehen, besser geschützt sein sollten.
                Zuletzt geändert von qualle; 27.07.2005, 13:45.

                Kommentar


                • #9
                  Original geschrieben von qualle

                  Das Problem das ich habe steht hier:

                  index.php?old_qry=SELECT Rechnername, Bestellnummer FROM tbl_rechner WHERE rechnername LIKE

                  So und dann ist der Post zuende. So sollte es z.B aussehen:

                  index.php?old_qry=SELECT Rechnername, Bestellnummer FROM tbl_rechner WHERE rechnername LIKE '%FE%' ORDER BY Benutzer
                  Die Länge des URL inkl. Query-Var ist begrenzt, außerdem musst du die Vars auch mit urlencode kodieren, sonst bekommst du die merkswürdigsten Sachen . Andererseits, was spricht gegen Formular-(Hidden-)Felder mit POST-Übergabe

                  Der Artikel in aspheute kenn' ich auch

                  Kommentar


                  • #10
                    Original geschrieben von asp2php
                    Die Länge des URL inkl. Query-Var ist begrenzt, außerdem musst du die Vars auch mit urlencode kodieren, sonst bekommst du die merkswürdigsten Sachen . Andererseits, was spricht gegen Formular-(Hidden-)Felder mit POST-Übergabe

                    Der Artikel in aspheute kenn' ich auch
                    Es liegt nicht an der Länge, hab ich schon geprüft.
                    Per Hidden würde es auch gehen. Richtig.


                    Zu http://de3.php.net/register_globals :

                    Verstehe ich das richtig, das ich mit RegGlo. ich IMMER angeben muss woher die Variable kommen darf?

                    Also eine per Post übermittelte Variable kann ich nicht mehr per

                    $quadrat=$postvar*$postvar;

                    abfragen sondern nurnoch mit:

                    $quadrat=$_POST['postvar']*$_POST['postvar']


                    Ist :-)



                    Was weniger cool ist, ist der erste Comment von kcinick at ciudad dot com dot ar:

                    Der meint das mein <VirtualHost> das nich mehr richtig checkt. Muss ich ja alles auf <Directory> umstellen :-(

                    Kommentar


                    • #11
                      <klugscheiß>
                      PHP-Code:
                      $quadrat=pow($_POST['postvar'], 2); 
                      </klugscheiß>

                      Kommentar


                      • #12
                        jaaaaaaah ^^

                        Geht ums prinzip :-p

                        Kommentar


                        • #13
                          das problem ist nicht das hochkomma, sondern das % dahinter.

                          am besten du base64 encodest den query beim abschicken (gibt javascript klassen im netz, die das können) und decodest die dann vor dem ausführen wieder.

                          wahlweise kannst du den query auch urlencoden, da gibts bei js auch ne built-in funktion zu. persönlich find ich base64 aber chiquer.

                          wenn du den query string in einer textarea ausgibst z.b. aus der datenbank, sollteste du ihn zudem mit htmlentities() encoden.

                          Kommentar

                          Lädt...
                          X