Geschützte MySQL-Verbindung in Klasse?!

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

  • Geschützte MySQL-Verbindung in Klasse?!

    Hey Ho,
    Mal wieder eine bescheidene Frage von mir^^ Und zwar habe ich eine Klasse für mein Accountsystem geschrieben. Diese stelle ich über den includepath für bestimmte vHosts zur verfügung..

    In dieser Klasse gibt es eine Funktion namens connect(), die am Anfang eine Verbindung zur Account-Datenbank (MySQL) herstellt:

    PHP-Code:
    public function connect() {
            
    $this->link mysql_connect("localhost""user""password"
    true);
            
    mysql_select_db("micronax_mymicronax"$this->link);
        } 
    This->link ist wie folgt definiert
    PHP-Code:
    protected $link false
    In der Klasse führe ich querys durch mit
    PHP-Code:
    $result mysql_query($sql$this->link) or die(mysql_error()); 
    Meine Anfangsüberlegung war: Wenn ich den link nur in der Klasse definiere und auf protected setze, müsste man außerhalb der Klasse ja eigendlich nicht auf diese MySQL-Verbindung zugreifen können. Damit lag ich aber leidet falsch. Es ist möglich. Hab schon probiert, mittel __destruct die Verbindung wieder zu schließen.. bringt aber auch nichts..

    Hat jemand eine Idee, wie ich es machen kann, das diese Verbindung mit diesen Zugangsdaten nur Klassenintern verfügbar ist?

    Danke & Grüße,

    Fabian
    Micronax.de

  • #2
    http://de3.php.net/manual/de/ref.pdo.php

    Schau dir das mal an.

    Kommentar


    • #3
      das diese Verbindung mit diesen Zugangsdaten nur Klassenintern verfügbar ist?
      private?

      gruß
      peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Wenn keine Verbindungskennung bei den Mysql-Funktionen angegeben wird, wird automatisch die letzte genommen.
        Ich denke dass darin das Problem besteht.

        Kommentar


        • #5
          Original geschrieben von $_Baker
          Wenn keine Verbindungskennung bei den Mysql-Funktionen angegeben wird, wird automatisch die letzte genommen.
          Ich denke dass darin das Problem besteht.
          Genau. Aber wie kann man das unterbinden?

          Kommentar


          • #6
            Original geschrieben von Kropff
            private?

            gruß
            peter
            Müsste doch auch mit dem von mir verwendeten protected gehen, oder? und das tuts nich^^

            Kommentar


            • #7
              Die mysqlverbindung von den mysqlfunktionen ist offenbar global gültig.
              Eine Option wäre es, PDO zu benutzen

              Kommentar


              • #8
                Wenn ich mir die Syntax und Benutzung von PDO anschaue.. *grml* Da bekomm ich gleich eine Abneigung dagegen^^

                Gibt's denn keine andere Möglochkeit?

                Kommentar


                • #9
                  Die mysqlverbindung von den mysqlfunktionen ist offenbar global gültig.
                  also entwder reden wir aneinander vorbei oder ich verstehe nur bahnhof. also, ich setze eine variable für die resource:
                  PHP-Code:
                  class MySQL
                  {
                    private 
                  $link;
                    ...

                  dann baue ich die verbindung auf und die resourcen-kennung wird gesetzt:
                  PHP-Code:
                  $this->link mysql_connect (...) 
                  und dann lasse ich abfragen nur mit entsprechender kennung zu:
                  PHP-Code:
                  public function doQuery($query)
                  {
                    if (
                  is_resource ($this -> link))
                    {
                      
                  $result mysql_query(...);
                    } 
                  da die variable auf private gesetzt ist, kann die resourcen-kennung nur innerhalb der klasse gesetzt und genutzt werden.

                  gruß
                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    Jopp, genauso sollte es sein. Man kann diese Resource auch nicht direkt außerhalb der Klasse nutzen. Das Problem ist: Wenn man außerhalb der Klasse ein Query durchführt aber keine spezifische Resource angibt.. wird die letzte verwendet.. und wenn diese eben die der Klasse ist.. kann man diese uneingeschränkt benutzen. -> schlecht..

                    Kommentar


                    • #11
                      und wenn man nach jeden query die verbindung trennt?
                      PHP-Code:
                      public function doQuery($query)
                      {
                        if (
                      is_resource ($this -> link))
                        {
                          
                      $result mysql_query(...);
                          
                      mysql_close (this -> link);
                        }

                      Wenn man außerhalb der Klasse ein Query durchführt aber keine spezifische Resource angibt.. wird die letzte verwendet
                      ich verstehe ehrlich gesagt nicht ganz den sinn. offenbar willst du keine sql-abfragen innerhalb deiner anwendung zulassen, die nicht über deine klasse läuft. richtig?

                      gruß
                      peter
                      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                      Meine Seite

                      Kommentar


                      • #12
                        Du meinst, die doQuery() soll beim Aufrufen verbinden, den query ausführen und dann wieder closen?

                        ich verstehe ehrlich gesagt nicht ganz den sinn. offenbar willst du keine sql-abfragen innerhalb deiner anwendung zulassen, die nicht über deine klasse läuft. richtig?
                        Das wird die Account-Klasse mit sämtlichen Benutzer- und Kundendaten. Nur die Klasse mit ihren Funktionen, die auf Sicherheitslücken getestet ist und nur bestimmte Vorgänge mit bestimmten Rechten ausführen kann, darf Zugriff zu diese Datenbank haben. Sprich es ist ohne das komplexe Password oder sonstige MySQL-Hacks nicht möglich, z.B. per Injection oder sonst was Userdaten auszuspähen oder zu ändern.. Und Sicherheit ist mir sehr wichtig.

                        lg

                        Fabian

                        Kommentar


                        • #13
                          Und wenn du dir eine Klasse erstellst, die PDO "extended" ?//zwecks Übersichtlichkeit

                          Könnte mir vorstellen, das ein Neuverbinden bei jedem Query sehr... performancelastig ist

                          Kommentar


                          • #14
                            Original geschrieben von $_Baker
                            Und wenn du dir eine Klasse erstellst, die PDO "extended" ?//zwecks Übersichtlichkeit

                            Könnte mir vorstellen, das ein Neuverbinden bei jedem Query sehr... performancelastig ist
                            Das könnte gut sein, ja.. Mh... wenn ich mittels PDO zu MySQL verbinde.. wirft mir das Ding vor, das die Treiber fehlen.. Ein Blick in die phpinfo sagt mir, das ich wirklich nur die für sqllite habe.. Also muss ich jetz ma rausfinden, wie ich die nachinstallieren kann..

                            Kommentar


                            • #15
                              Original geschrieben von micronax

                              Das wird die Account-Klasse mit sämtlichen Benutzer- und Kundendaten. Nur die Klasse mit ihren Funktionen, die auf Sicherheitslücken getestet ist und nur bestimmte Vorgänge mit bestimmten Rechten ausführen kann, darf Zugriff zu diese Datenbank haben. Sprich es ist ohne das komplexe Password oder sonstige MySQL-Hacks nicht möglich, z.B. per Injection oder sonst was Userdaten auszuspähen oder zu ändern.. Und Sicherheit ist mir sehr wichtig.
                              Hahaha ... ist ja ultra ulkig ... überlege doch mal ... wie kann man angreifen? Über inkomming datas, richtig? Und deine Anwendung behandelt auch inkomming datas, also wo soll denn was sicher sein, wenn du inkomming datas ungeprüft durch lässt ... du schraubst an der falschen Stellen! Das was du machen sollst, ist inkomming datas genau unter der Lupe nehmen bevor du irgendwas damit machst. Was nützt dir denn den Schrott mit der nicht zugreifbaren Verbindungsresource, wenn du doch dann selbst aufbaust, um selbst die User-Eingabe zu verarbeiten ... hahaha ist echt amüsant hier.

                              Kommentar

                              Lädt...
                              X