Daten von mysql_connect verschlüsseln

Alles, was PHP betrifft, kann hier besprochen werden.

Daten von mysql_connect verschlüsseln

Postby Poison of the Cursed » 07. May 2010 21:24

Hallo Zusammen,

ich stelle jetzt wahrschienlich eine ziemlich blöde Frage, aber ich habe weder über Goggle, noch in verschiedenen Foren eine Antwort gefunden. Vielleicht habe ich auch die falschen Suchkriterien eingegeben.

Um die Datenbank zu öffnen, muss man ja immer den Servernamen, das Passwort und den Benutzernamen angeben. Auf meinem lokalen Server zum üben und in allen Beispielen von LogIn-Scripten im Netz, sind diese Daten für jeden ersichtlich. Wenn ich das ganze in meiner Homepage nun Online stelle, muss ich solche Eingaben ja aber verschlüsseln.

Wie genau mache ich das? Mit MD5?

Wäre für Hilfe echt dankbar.

Liebe Grüße
Poison
Poison of the Cursed
 
Posts: 31
Joined: 27. April 2010 17:56

Re: Daten von mysql_connect verschlüsseln

Postby Altrea » 08. May 2010 09:56

Poison of the Cursed wrote:Um die Datenbank zu öffnen, muss man ja immer den Servernamen, das Passwort und den Benutzernamen angeben. Auf meinem lokalen Server zum üben und in allen Beispielen von LogIn-Scripten im Netz, sind diese Daten für jeden ersichtlich.

Nicht für jeden. Da sich dein Datenbank-connect (und falls du die Logindaten selbst auch woanders hast, ist dies in der Regel auch eine php-Datei, sowas wie config.inc.php) in der Regel in einer PHP-Datei befindet, wird diese nachdem sie angefordert wurde erstmal durch den PHP-Parser geschickt und verarbeitet. Was der User dann letztendlich vom Server zurückgesendet bekommt, enthält nichts mehr von den Logindaten. Das kannst du ja ganz leicht testen, indem du lokal so ein script aufrufst und danach den Browser-Quelltext betrachtest.

Ein paar Dinge musst du zur Sicherheit dennoch beachten:
- Schränke die Rechte des mysql-Users der sich mit der Datenbank verbindet soweit ein wie möglich. Benutze keinesfalls root als User für deine Webprojekte! Und verwende für verschiedene Webprojekte auch verschiedene mysql-user.
- Solltest du anderen Usern per FTP zugriff auf deinem Server geben, schränke auch dieses soweit ein, dass sie nur auf bestimmte, unkritische Bereiche zugriff haben.
- Dinge wie Datenbankconnects werden in der Regel nicht direkt über eine URL aufgerufen. Diese scripte kannst du auch eine oder mehrere Ordnerebenen über deinem webroot Ordner ansiedeln.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Daten von mysql_connect verschlüsseln

Postby Poison of the Cursed » 08. May 2010 12:39

Hallo Altrea,

ok, ich verziehe mich in eine Ecke und schäme mich :-(
Dachte wirklich, das ganze PHP-Script steht im Quellcode. Neeeeiiiinnnnn, ich bin ja so blöd.

Deine Antwort hat jedoch wieder neue Fragen bei mir aufgeworfen:

Altrea wrote:Ein paar Dinge musst du zur Sicherheit dennoch beachten:
- Schränke die Rechte des mysql-Users der sich mit der Datenbank verbindet soweit ein wie möglich. Benutze keinesfalls root als User für deine Webprojekte! Und verwende für verschiedene Webprojekte auch verschiedene mysql-user.
- Solltest du anderen Usern per FTP zugriff auf deinem Server geben, schränke auch dieses soweit ein, dass sie nur auf bestimmte, unkritische Bereiche zugriff haben.
- Dinge wie Datenbankconnects werden in der Regel nicht direkt über eine URL aufgerufen. Diese scripte kannst du auch eine oder mehrere Ordnerebenen über deinem webroot Ordner ansiedeln.


1. Was meinst du damit, dass sich ein User mit meiner Datenbank verbindet?

Die Verbindung mit der Datenbank wird aus folgendem Grund geöffnet:
Einer meiner Besucher löst ein Rätsel, indem er das Lösungswort in ein Formular einträgt. Beim versenden wird er auf die nächste Seite weitergeleitet, in dem sich ein PHP-Script befindet. Es wird abgefragt, ob das Lösungswort korrekt ist. Falls ja, soll eine Verbindung zur Datenbank hergestellt und die Spalten Rätsel und Punkte ausgelesen werden. Hat er das Rätsel noch nicht gemacht (in der Spalte Rätsel steht 0), soll in die Spalte Rätsel eine 1 geschrieben werden, damit er nicht nochmal an dem Rätsel teilnehmen kann. Gleichzeitig erhält er eine Anzahl von Punkten, die den Wert der Spalte Punkte erhöhen. Danach soll die Verbindung zur Datenbank wieder geschlossen werden. Sollte etwas nicht korrekt sein (Lösungswort falsch oder Rätsel bereits gemacht), erhält der Benutzer eine entsprechende Meldung.

Hat da jetzt trotzdem der User die Verbindung geöffnet?


2. In einem mySQL-Tutorial habe ich gefunden, wie man eine Tabelle und einen User über phpMyAdmin händisch anlegt. Hier habe ich die Möglichkeit Rechte zu vergeben. Wenn bei dem Beispiel unter 1 der User die Verbindung öffnet, müsste ich ihm ja zumindest folgende Rechte vergeben: SELECT, INSERT und UPDATE. Oder?
Kann er sich dann die Datenbank auch ansehen? Das möchte ich nämlich nicht.

3. Wie ist das gemeint?
Altrea wrote:Dinge wie Datenbankconnects werden in der Regel nicht direkt über eine URL aufgerufen. Diese scripte kannst du auch eine oder mehrere Ordnerebenen über deinem webroot Ordner ansiedeln.


Sorry, dass ich mich so doof anstelle, aber ich bin schon total durcheinander und blicke langsam gar nichts mehr.

Liebe Grüße
Poison
Poison of the Cursed
 
Posts: 31
Joined: 27. April 2010 17:56

Re: Daten von mysql_connect verschlüsseln

Postby Altrea » 08. May 2010 13:45

Poison of the Cursed wrote:Deine Antwort hat jedoch wieder neue Fragen bei mir aufgeworfen:

Okay, dann versuche ich mal Licht ins Dunkel zu bringen :D

Poison of the Cursed wrote:1. Was meinst du damit, dass sich ein User mit meiner Datenbank verbindet?

Mit User ist in dem Fall nicht der Anwender gedacht, der das Formular ausfüllt, sondern die Logindaten die du der mysql_connect (oder ähnlichen Funktionen zum Datenbankconnect) übergibst.
Dieser mysql-benutzer hat gewisse Rechte, was er alles mit der Datenbank tun darf. Und hier solltest du darauf achten, dass er nicht zuviele Rechte hat.
Das ist eine reine Schutzmaßnahme. Denn falls jemand wie auch immer deine Datenbankverbindung missbraucht (Stichwort SQL-Injection, etc.), hälst du den Schaden so gering wie möglich.

btw.: Du solltest natürlich vor Allem auch darauf achten, dass deine php-Scripte sicher sind!

Poison of the Cursed wrote:2. In einem mySQL-Tutorial habe ich gefunden, wie man eine Tabelle und einen User über phpMyAdmin händisch anlegt. Hier habe ich die Möglichkeit Rechte zu vergeben. Wenn bei dem Beispiel unter 1 der User die Verbindung öffnet, müsste ich ihm ja zumindest folgende Rechte vergeben: SELECT, INSERT und UPDATE. Oder?

Genau, das wäre in dem Fall die Minimalanforderung.

Poison of the Cursed wrote:Kann er sich dann die Datenbank auch ansehen? Das möchte ich nämlich nicht.

Auch hier muss man wieder differenzieren zwischen mysql-user und Anwender. Der Anwender hat keine Kenntnisse über die Datenbankverbindung, kann also auch nicht einfach deine ganze Datenbank auslesen (Auch hier wieder die Einschränkung, wenn dein php-script selbst nicht sicher ist, trifft meine Aussage nicht zu)

Poison of the Cursed wrote:3. Wie ist das gemeint?
Altrea wrote:Dinge wie Datenbankconnects werden in der Regel nicht direkt über eine URL aufgerufen. Diese scripte kannst du auch eine oder mehrere Ordnerebenen über deinem webroot Ordner ansiedeln.


Okay, nehmen wir mal an, du hättest XAMPP für Windows in dem empfohlenen Standardverzeichnis C:\xampp installiert. Dein webroot Ordner ist htdocs (bei anderen Apache Paketen kann dies auch der Ordner www, wwwroot oder sonst irgendwas sein).
Normalerweise würdest du deine ganzen Dateien also in den Ordner C:\xampp\htdocs oder einem Unterordner davon packen. Da spricht auch erstmal nichts gegen. Du solltest nur bedenken, dass jede Datei und jeder Ordner in deinem webroot Ordner über die Adressleiste des Browsers, also über eine eigene URL, angesprochen werden kann.

Bei vielen Dateien ist es aber garnicht notwendig oder erwünscht sie über die URL aufrufen zu können (die php-Datei die den Datenbank-connect ausführt wirst du zum Beispiel nicht über deinen Browser aufrufen, sondern per php-include oder sonstiges einbinden). Diese Dateien könnten ganz woanders liegen, in der Regel auf derselben Ebene als der webroot ordner (also zum Beispiel im Ordner c:\xampp\dbconnect.php - selbstverständlich würde man es vorziehen dort auch irgendeine Ordnerstruktur aufzubauen, zum Beispiel sowas: c:\xampp\projectxy\includes\dbconnect.php - da projectxy ein Nebenzweig von htdocs ist und kein Unterordner von diesem, kann der Zweig nicht über die URL, wohl aber per php-include angespochen werden).

Soetwas findest du aber in der Regel in keinem Anfängertutorial (auch weil es da die eine oder andere Sache zu beachten gibt), deshalb will ich es mal als Technik für Fortgeschrittene bezeichnen. Es gibt auch noch genug Webhoster, bei denen man garkeinen Verwaltungszugriff auf Ordner über dem Webroot Ordner bekommt.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Daten von mysql_connect verschlüsseln

Postby Altrea » 08. May 2010 22:16

Eine besondere Möglichkeit gibt es noch, wird aber seltener eingesetzt.

Du kannst in .htaccess Dateien Server-Umgebungsvariablen setzen.

Das sieht dann zum Beispiel so aus:
.htaccess wrote:SetEnv DB_HOST localhost
SetEnv DB_USER root
SetEnv DB_PASS password


Diese Variablen kannst du über die Superglobale Variable $_SERVER ansprechen.
Der passende mysql_connect dazu sähe zum Beispiel so aus:
Code: Select all
mysql_connect($_SERVER['DB_HOST'],$_SERVER['DB_USER'], $_SERVER['DB_PASS']);
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Daten von mysql_connect verschlüsseln

Postby WilliL » 09. May 2010 17:22

ich habe für mich folgenden Weg gewählt:
(gegeben: es kann kein Ordner unterhalb oder neben ../htdocs/ genutzt werden - sonst diese Variation nehmen)
es existiert unter ../htdocs/ ein Unterordner /odner/

hier liegt die Datei .htaccess:
Code: Select all
# .htaccess .. /odner/
Order allow,deny
# deny from all
Damit kann man nicht direkt auf Dateien in diesem Ordner zugreifen, sie aber per include einbinden..

... und eine inc.php
Code: Select all
<?php
//
// per require_once/include_once ('inc.php')
//
If (stristr($_SERVER["DOCUMENT_ROOT"],"xampp")) {
   // Login Parameter local
   $htdoc_path = "C:/xampp/htdocs/"; // $_SERVER["DOCUMENT_ROOT"]
    $db_host = "localhost";
    $db_user = "xampp_user";
    $db_pass = "xampp_pass";
    $db_name = "xampp_name";
} Else {
   // Login Parameter hoster
   $htdoc_path = "/www/htdocs/hoster/";
    $db_host = "hoster_host";
    $db_user = "hoster_user";
    $db_pass = "hoster_pass";
    $db_name = "hoster_name";
   }
?>

Der passende mysql_connect dazu sähe zum Beispiel so aus:
Code: Select all
<?php
...
       include_once ('inc.php');
...
       mysql_connect($db_host,$db_user,$db_pass);
...
?>


PS: Danke an Altrea und Nobbie
Willi
WilliL
 
Posts: 660
Joined: 08. January 2010 10:54
Operating System: Win7Home Prem 64 SP1

Re: Daten von mysql_connect verschlüsseln

Postby Altrea » 09. May 2010 18:19

Auch eine oft verwendete Art.

Ein paar weiterführende Tipps:

WilliL wrote:
Code: Select all
# .htaccess .. /odner/
Order allow,deny
# deny from all


Das deny from all würde ich noch auskommentieren. Macht auf den ersten Blick keinen Unterschied, doch wenn du irgendwo ausversehen eine allow directive definiert hast, würde diese zum Tragen kommen. Kann gewollt sein. Wenn sich in dem Ordner aber nur Dateien befinden, die includiert werden, dann macht ein deny from all mehr Sinn.

Wenn man bei einem Projekt nicht verschiedene Logindaten nebeneinander verwendet, bzw. sich diese zur Laufzeit nicht ändern, könnte man die Logindaten sogar als Konstanten festlegen.

P.S.: nichts zu Danken, immerwieder gern :)
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Daten von mysql_connect verschlüsseln

Postby WilliL » 09. May 2010 19:45

Altrea wrote:Wenn man bei einem Projekt nicht verschiedene Logindaten nebeneinander verwendet, bzw. sich diese zur Laufzeit nicht ändern, könnte man die Logindaten sogar als Konstanten festlegen.

hatte ich mir auch überlegt, aber ich weiß noch nicht, ob ich die Zugriffe mit unterschiedlichen Rechten realisieren will (ro | rw).
Als Konstante möchte ich nur Werte nutzen, die 'nie' mehr geändert werden sollen
Altrea wrote:Das deny from all würde ich noch auskommentieren. Macht auf den ersten Blick keinen Unterschied, doch wenn du irgendwo aus versehen eine allow directive definiert hast, ..

Will mir zwar nicht ganz einleuchten - müsste eigentlich egal sein - , aber habe ich geändert und auch kommentiert. Da setze ich Hinweise von Routiniers und deren Erfahrung gerne um.
Willi
WilliL
 
Posts: 660
Joined: 08. January 2010 10:54
Operating System: Win7Home Prem 64 SP1

Re: Daten von mysql_connect verschlüsseln

Postby Altrea » 09. May 2010 21:23

WilliL wrote:Will mir zwar nicht ganz einleuchten - müsste eigentlich egal sein - , aber habe ich geändert und auch kommentiert. Da setze ich Hinweise von Routiniers und deren Erfahrung gerne um.

Nunja, sagen wir mal so: Der tipp ist hier eher "Definiere deine Zugriffsregeln immer so exakt wie möglich".
In 99% der Fälle wirst du auch mit deiner Variante keine Probleme haben. Erst wenn deine .htaccess Datei groß und unübersichtlich wird, kann es vorkommen, dass sich verschiedene Zugriffsregeln widersprechen, bzw. du irgendwo eine allow Regel definierst, wo sie eigentlich nicht gedacht war.
Deine Zugriffsverweigerung beruht allein auf die Tatsache, dass weder eine deny, noch eine allow Regel definiert wurde. Das ist wie gesagt in 99% aller Fälle vollkommen ausreichend.
Aber wenn man schon vorhat, Zugriffe zu verweigern, kann man auch direkt die entsprechende deny Regel definieren. Das ist die sauberste Art und Weise und man schließt zu 100% aus, dass man doch irgendwo mal aus unübersichtlichkeit irgendwo ausversehen eine allow Regel falsch definiert hat.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Daten von mysql_connect verschlüsseln

Postby WilliL » 11. May 2010 19:58

Altrea wrote:Der tipp ist hier eher "Definiere deine Zugriffsregeln immer so exakt wie möglich".
In 99% der Fälle wirst du auch mit deiner Variante keine Probleme haben.

ok, das leuchtet ein
Willi
WilliL
 
Posts: 660
Joined: 08. January 2010 10:54
Operating System: Win7Home Prem 64 SP1


Return to PHP

Who is online

Users browsing this forum: No registered users and 18 guests