Datensicherheit!

HTML, PHP, CSS, CGI, ASP... :computer:

Moderator: DCE Team

Datensicherheit!

Beitragvon Stefan » Do 25.02.2010 17:26

Hi!

Ich habe mir gerade überlegt, sensibele Daten verschlüsselt zu speichern. PHP hat einige Befehle hierfür. Doch scheint mir das eher zu schwach?! Denn wenn einer es schafft wirklich an die Dateien zu kommen und hat den Text, der kann dann den verschlüsselten Text ganz einfach wieder entschlüsseln. Nun habe ich mich ein bisschen umgesehen und festgestellt die Sache ist auch nicht so einfach wie ich mir vorgestellt habe.
Gibt es denn Basic Model für Verschlüsselung?

Und abgesehen von der Text Verschlüsselung, ist immer noch das Problem die Übertragung der Daten. Das heißt, Text vor dem Absenden verschlüsseln (eher Fragwürdig) oder per SSL (was ja auch wiederum entsprechende Kenntnisse erfordert)!?


In den Anfängen meiner Programmierung, habe ich auch meine Texte verschlüsselt, indem ich mein eigenes System gebastelt habe. Nun habe ich aber festgestellt, dass selbstgebastelte Sachen eher mit Vorsicht zu genießen sind. Und weil es noch nicht genug Fragen sind, wäre ja noch die Sache mit dem Speichern. Inwiefern vergrößert sich dann der Speicherplatz, und inwiefern ist es dann sinnvoll eine starke Verschlüsselung anzuwenden.

Wie macht ihr das?

Lg, Stefan
Benutzeravatar
Stefan
Team
 
Beiträge: 996
Registriert: Fr 13.08.2004 10:58

Re: Datensicherheit!

Beitragvon Asto » Do 25.02.2010 20:02

Nun grundsätzlich kommt es erst mal darauf an, was du für Daten hast. Dementsprechend sollte auch die Verschlüsselung ausfallen.

Man muss das ganze ein wenig aufteilen: Soll es einfach nur Verschlüsselt gespeichert werden, um Unbekannten das Lesen der gesammelten / zusammen getragenen Daten vieler Menschen zu untersagen, oder müssen die Daten schon während der Übertragung (wie Bankdaten) verschlüsselt sein, da sensible Informationen?

Müssen sensible Daten übertragen werden, dann sollte man eine SSL Verbindung nutzen. Dazu sind aber nicht viele Kenntnisse erforderlich, nur sollte mein ein eigenes Zertifikat dafür erwerben (stellt sicher das der Server auch der ist, für den er sich ausgibt, kostet daher ein wenig), und dann muss man die Formulare einfach via https:// ansteuern.

Um die Daten dann auch in der Datenbank zu schützen, gibt es direkt von unserem lieben MySQL entsprechende Methoden.
siehe: http://dev.mysql.com/doc/refman/5.0/en/ ... tions.html

Daten die hingegen nicht wieder entschlüsselt werden müssen, kann man auch durch so genanntes Hashing 'verschlüsseln'. Dies wird vorwiegend bei Passwörtern gemacht -Stichworte dazu sind das wohl am häufigsten Verwendete md5() und crypt(). Zu beachten ist hierbei das es eben 'Einweg-Verschlüsselungen' sind. Aber alles andere ist auch nicht nötig, denn sollte der User das Passwort vergessen generiert man ihm einfach ein Neues.
Wenn man 'möchte' kann man auch die Passwörter aus Formularen vor dem Senden an den Server via Javascript md5-verschlüsseln. Dies setzt natürlich voraus, das für die Seite Javascript aktiviert sein muss.

Speicherplatz ist eine andere Sache. Dabei kommt es natürlich auf den Algorithmus an. Grundsätzlich steigt der Speicherplatz auf die Länge der verschlüsselten Strings an, die durch eine Verschlüsselung ggf. länger werden. Aber das ist in der Regel nicht das Problem. Größere 'Sorgen' beschert eher der erhöhte CPU-Bedarf, den man immer wieder zum ent- und verschlüsseln der Daten benötigt. Und um so sicherer der Algo in der Regel ist, desto mehr muss die CPU rechnen.

:wink:
XING | The Secret of Success: Suck Less.
Benutzeravatar
Asto
Team
 
Beiträge: 2023
Registriert: So 19.09.2004 21:52

Re: Datensicherheit!

Beitragvon TheBrainless » Do 25.02.2010 21:52

Naja, md5 ist nur bedingt empfehlenswert, weil es algorithmisch als geknackt gilt. Empfehlenswert ist mindestens sha1(), wobei selbst da schon heise Meldungen gebracht hat, dass es geknackt wäre (liest man allerdings die Forenbeiträge dazu, lässt es eher drauf schließen, dass die Meldung etwas frei übersetzt ist.). Also spricht eigentlich nix gegen Sha1 (im Gegensatz zu md5, da gibts auf Wikipedia ein Programm, mit dem man Kolissionen erzeugen kann).

Für ne Mehrwegverschlüsselung ist AES bzw. Rijndael zu empfehlen. Da braucht man nen Individuellen Basisschlüssel, mit dem der Text dann verschlüsselt wird. Empfehlenswert wäre dazu das Benutzerpasswort, da dieses nur dem Benutzer bekannt ist (bzw. sein sollte ;) ). AES ist leider nicht direkt verwendbar, sondern man muss den Umweg über mcrypt() gehen, das Beispiel verwendet allerdings schon AES, kann man also 1:1 übernehmen.

Wobei mich ehrlich gesagt ma Intressieren würde, wozu du unbedingt die Daten verschlüsseln willst/musst. In der Regel ist es sinnvoller, dafür zu sorgen, dass deine Scripte sicher sind und unanfällig für SQL-Injections. Die sind nämlich ein weitaus größeres Problem ;-).
Ansonsten sollte man wie von Asto schon gesagt eine SSL-Verbindung zum Server verwenden, wobei man da in der Regel einige Hundert Euro pro Jahr dafür Zahlen muss (weswegen es sich bei kleinen Seiten eher nicht lohnt).

Gruß,
Felix
Benutzeravatar
TheBrainless
Team
 
Beiträge: 504
Registriert: So 18.09.2005 11:07
Wohnort: /d/ulm

Re: Datensicherheit!

Beitragvon Asto » Fr 26.02.2010 01:49

MD5: Ja im prinzip hast du recht, hätte ich auch erwähnen sollen - wobei das 'geknackt' auch noch so eine Definitions-Sache ist. Prinzipiell könnte man es noch verwenden und die Sicherheit wäre auch noch mehr oder weniger gegeben, aber zustimmen muss ich dir einwandfrei, Alternativen zu md5 sind wohl mittlerweile eine bessere Wahl.

AES: Da muss man schauen, ob man MySQL die Arbeit machen lassen will, oder ob PHP das übernehmen soll. Ich denke wenn die Inhalte der Datenbank verschlüsselt werden müssen, kann / sollte auch MySQL das übernehmen.

Und: Ja in erster Linie muss man natürlich sehen, das die Scripts auch rundum sicher sind, bevor man die Daten selber sichern will. SQL-Injections sind da ein besonderes Thema, allerdings muss man da eigentlich nur ein paar grundlegende Dinge beachten. Bei Klassen wird ja gerne gleich auf die prepared Statements zurückgegriffen, ansonsten eben wie im anderen post auch erwähnt mysql_real_escape_string(). Was ich sonst auch eben gerne mache, ist, wenn man nur eine ID irgendwo her hollt wird sie eben via (int) / intval() umgewandelt und der Wertebereich überprüft, jut is :D
Man muss eben nur immer sicherstellen das der Typ auch der richtige ist und dementsprechend auch nur erlaubte Zeichen enthalten sind. Also primär keine Anführungszeichen in Strings, und Zahlen sollten auch wirklich nur Zahlen sein.

Übrigens: Netter Wiki-Arikel zum Thema SQL-Injektionen, kannte ich auch noch nicht - Veranschaulicht nochmal schön die Probleme die durch Injektionen auftreten können. :eye:
XING | The Secret of Success: Suck Less.
Benutzeravatar
Asto
Team
 
Beiträge: 2023
Registriert: So 19.09.2004 21:52


Zurück zu Websprachen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron