Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm- und Quellcodesicherheit (https://www.delphipraxis.net/122394-programm-und-quellcodesicherheit.html)

Yheeky 15. Okt 2008 13:16


Programm- und Quellcodesicherheit
 
Hi,

ich programmiere derzeit ein Projekt mit dem ich über eine Win32-Anwendung auf meinen Server zugreife. Diese mache ich über die Komponente idHTTP von den Indys und sende Daten an PHP-Dateien.

z.B.

Code:
[…]?login.php&username=Test&password=testpsw
Die Aufrufe stehen natürlich in meiner Anwendung, auf dem Server werden die Aufrufe aber vorher über „mysql_real_escape_string“ geprüft, so dass diese nicht manipuliert werden können.

Nun habe ich dazu mehrere Fragen:
1.) Inwiefern ist mein Projekt sicher, wenn die PHP-Abfragen über eine Win32 Applikation aufgerufen werden (vorausgesetzt, die PHP-Funktionen sind gut programmiert worden)?
2.) Würde eine Lösung über ASP.net mehr Sinn machen (z.B. über C# und LINQ), weil man hier keine Quellcode-Daten einsehen kann?
3.) Gibt es sowas wie LINQ auch für Delphi? Dann könnte man ja auch über die Entwicklungsumgebung vom BDS etwas machen…

Bin gespannt, was ihr zum Thema zu sagen habt :-)

Bernhard Geyer 15. Okt 2008 13:32

Re: Programm- und Quellcodesicherheit
 
zu 1: Welche Sicher meinst du? Sicher gegenüber Manipulation oder gegenüber Abfriff der Zugangsdaten

zu 2: Jedliche Daten die beim Client liegen können manipuliert werden. Selbst bei einer ASP.NET-Anwendung können die Post-Daten/Replies manipuliert werden (Eingabekontrolle auf Client reicht nicht).

zu 3: LINQ bei einer Clientanwendung bringt dir im Bereich Sicherheit nix. "Einfach" einen Proxie entwickeln und die Daten "on the fly" manipulieren.

Yheeky 15. Okt 2008 13:40

Re: Programm- und Quellcodesicherheit
 
Zitat:

Zitat von Bernhard Geyer
zu 1: Welche Sicher meinst du? Sicher gegenüber Manipulation oder gegenüber Abfriff der Zugangsdaten

Beides ;-)

Zitat:

Zitat von Bernhard Geyer
zu 2: Jedliche Daten die beim Client liegen können manipuliert werden. Selbst bei einer ASP.NET-Anwendung können die Post-Daten/Replies manipuliert werden (Eingabekontrolle auf Client reicht nicht).

Okay, heisst letztendlich: die Oberfläche ist egal (ob Win32 oder ASP.net...kontrolliert werden muss immer auf dem Server, richtig?

Zitat:

Zitat von Bernhard Geyer
zu 3: LINQ bei einer Clientanwendung bringt dir im Bereich Sicherheit nix. "Einfach" einen Proxie entwickeln und die Daten "on the fly" manipulieren.

LINQ bringt auch unter ASP.net nichts?

Bernhard Geyer 15. Okt 2008 13:47

Re: Programm- und Quellcodesicherheit
 
zu 1: Du kannst nur durch Verschleierung bzw. durch Verschlüsselung die Manipulation erschweren

zu 2: Ja.

zu 3: Hab ich nicht gemeint. LINQ im Bezug auf Sicherheit/Manipulation. Auf BDS/CDS-Seite wird nicht mehr viel kommen. Ich denke in 2 Wochen (zur EKON) dürfte die zukünftige Strategie von Delphi/Codegear und Delphi klarer sein. Es soll ja ein Plugin für VS.NET geben um .NET 3.5 mit einer Pascal-Like-Sprache vollständig zu unterstützen

Yheeky 15. Okt 2008 13:54

Re: Programm- und Quellcodesicherheit
 
Was „on the fly“ ist würde mich noch interessieren.

Okay, zusammengefasst:
Egal wie leicht oder schwer die Manipulation auf der Client-Seite ist, ich muss den Input auf der Serverseite nochmals abfragen und wenn das gut programmiert ist, ist die Anwendung entsprechend sicher. Richtig?

Luckie 15. Okt 2008 13:55

Re: Programm- und Quellcodesicherheit
 
Deine Zugansdaten werden immer mehr oder weniger im Klartext in der Exe-datei stehen und können deshalb auch realtiv leicht ausgelesen werden. Und wenn du keine verschlüsselte Verbindung hast, werden die daten auch im Klartext übertragen und können so mitgelesen werden.

Phoenix 15. Okt 2008 13:55

Re: Programm- und Quellcodesicherheit
 
Zitat:

Zitat von Yheeky
1.) Inwiefern ist mein Projekt sicher, wenn die PHP-Abfragen über eine Win32 Applikation aufgerufen werden (vorausgesetzt, die PHP-Funktionen sind gut programmiert worden)?

Du kannst nie ausschliessen oder gar verhindern, das irgendwer Deine PHP-Scripte manuell mit beliebig gewählten Parametern aufruft. Ergo: die PHP-Scripte müssen darauf ausgelegt sein, dass sie nicht nur von Deiner anwendung immer 'richtig' benutzt werden, sondern sie müssen auch beliebige fehlerhafte Eingaben richtig handhaben können. Und sei es, dass einfach nur 'gar nichts' passiert und sich das Script zur Sicherheit selber beendet.

Zitat:

Zitat von Yheeky
2.) Würde eine Lösung über ASP.net mehr Sinn machen (z.B. über C# und LINQ), weil man hier keine Quellcode-Daten einsehen kann?

Häh?

Erstens: Weder bei ASP.NET noch bei PHP sieht man den Quellcode. Okay, bei letzterem schon, wenn man entsprechende Rechte auf dem Server hat. Aber wenn man so weitgehende Rechte hat, dann kann man in der Regel sogar die Anwendung komplett umgehen (=> Datenbanklogin auslesen und direkt auf die DB...).

Zweitens: LINQ hilft in Hinblick auf Sicherheit gar nicht. LINQ ist - um das Schlagwort mal auseinander zu nehmen - 'nur' ein bisschen Compilermagic und eine handvoll vorgefertigter Funktionen, um Code zu sparen. LINQ kann nichts, was man nicht auch so mit ein paar Schleifen, ein paar Methoden und etwas Glue-Code dazwischen selber machen könnte.

Zitat:

Zitat von Yheeky
3.) Gibt es sowas wie LINQ auch für Delphi? Dann könnte man ja auch über die Entwicklungsumgebung vom BDS etwas machen…

Es gibt Delphi.NET - und das kann ASP.NET. Aber damit würde ich lieber noch ein klein wenig warten, bis Prism 8die neue Version von Delphi für .NET) draussen ist ;-) Die neue kann auch LINQ. Aber wie schon bei 2. gesagt: LINQ hilft Dir hier nichts.

Was willst Du denn eigentlich genau machen?

Bernhard Geyer 15. Okt 2008 13:58

Re: Programm- und Quellcodesicherheit
 
Zitat:

Zitat von Phoenix
Erstens: Weder bei ASP.NET noch bei PHP sieht man den Quellcode. Okay, bei letzterem schon, wenn man entsprechende Rechte auf dem Server hat. Aber wenn man so weitgehende Rechte hat, dann kann man in der Regel sogar die Anwendung komplett umgehen (=> Datenbanklogin auslesen und direkt auf die DB...).

Aber der von ASP.NET und PHP erzeugte HTML und JavaScript-Code geht zum Client und ist damit manipulierbar.

Phoenix 15. Okt 2008 14:03

Re: Programm- und Quellcodesicherheit
 
Das sowieso. Deswegen darf man sich auch nie auf das korrekte Verhalten des eigenen JavaScriptes verlassen, sofern es den Server anspricht. Wenn der Client mein GUI-Script kaputt macht und die Seite nicht mehr richtig bedienbar ist: Selber schuld.
Wenn er aber meinen Server mit Mülldaten lahmlegt, dann hab ich irgendwo richtig Scheisse gebaut ;-).

Wichtig ist die Eingabevalidierung auf dem Server. Jede Information, die den Server erreicht, ist potentiell böse.

Yheeky 15. Okt 2008 18:11

Re: Programm- und Quellcodesicherheit
 
Zitat:

Zitat von Phoenix
Du kannst nie ausschliessen oder gar verhindern, das irgendwer Deine PHP-Scripte manuell mit beliebig gewählten Parametern aufruft. Ergo: die PHP-Scripte müssen darauf ausgelegt sein, dass sie nicht nur von Deiner anwendung immer 'richtig' benutzt werden, sondern sie müssen auch beliebige fehlerhafte Eingaben richtig handhaben können. Und sei es, dass einfach nur 'gar nichts' passiert und sich das Script zur Sicherheit selber beendet.

Ja natürlich, aber ich kann nicht verhindern, dass jemand meine PHP-Datei mit 100 Parametern aufruft, obwohl maximal nur 3 verarbeitet werden, oder?! Ich habe meine PHP-Datei so aufgebaut, dass ein "Befehl" vorgegeben wird (z.B. Login, Logout, etc) und dann Parameter folgen, die verarbeitet werden. Wenn in Befehl eine fremder Eingabe steht, passiert garnichts.

Zitat:

Zitat von Phoenix
Erstens: Weder bei ASP.NET noch bei PHP sieht man den Quellcode. Okay, bei letzterem schon, wenn man entsprechende Rechte auf dem Server hat. Aber wenn man so weitgehende Rechte hat, dann kann man in der Regel sogar die Anwendung komplett umgehen (=> Datenbanklogin auslesen und direkt auf die DB...).

Naja, wenn der Server so schlecht eingerichtet ist, dass jeder darauf zugreifen kann dann ist das klar ;-) Nehmen wir mal an, der Server ist professionell eingerichtet worden.

Zitat:

Zitat von Phoenix
Es gibt Delphi.NET - und das kann ASP.NET. Aber damit würde ich lieber noch ein klein wenig warten, bis Prism 8die neue Version von Delphi für .NET) draussen ist ;-) Die neue kann auch LINQ. Aber wie schon bei 2. gesagt: LINQ hilft Dir hier nichts.

Was willst Du denn eigentlich genau machen?

Okay, ich dachte nur an LINQ für den Fall, dass man bei ASP.NET Projekten nicht an den Quellcode kommt, denn dann könnte ich alles in einem Projekt verwirklichen und müsste nicht Delphi- und PHP-Code schreiben.

Was ich genau mache kann ich natürlich nicht verraten ;-) aber hier vielleicht ein Beispiel:
Stelle dir eine Plattform wie z.B. Wer-kennt-Wen oder StudiVZ vor (keine Angst, ich mache nichts in die Richtung, aber von den Funktionen her, kann man´s ganz gut vergleichen). Ich habe ein Login/Logout und kann bestimmte Profile anschauen oder nicht. Mit einfachem Ändern der Parameter soll es aber nicht doch möglich sein, an gesperrte Profile zu kommen. Wer-kennt-Wen arbeitet mit PHP und mit einem Frontend (was in meinem Fall dann Delphi darstellen würde).
Falls du möchtest, kann ich aber gern genauer auf meine Idee eingehen, aber ich hoffe du hast es schonmal im Ansatz verstanden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz