kale_1990 Geschrieben 29. Juli 2008 Geschrieben 29. Juli 2008 hallo zusammen, folgende situation: html formular(method=post) wird abgeschickt und ruft ein perl/cgi-programm auf. aus diesem perl-pgr. wird mit print `./c-programm -arg ` ein c-programm aufgerufen. wenn ich nun in dem c-pgr. mit "getenv("QUERY_STRING");" die daten aus dem formular auslesen möchte, bekommen ich nur einen leeren string(aber "HTTP_COOKIE" zum beispiel kann ich auslesen). wenn ich das programm direkt starte, quasi im html formular "action=/c-programm" statt "action=/perl-programm", kann ich QUERY_STRING wiederrum auslesen. an was liegt das? gibt es eine chance aus dem von perl aufgerufen c-programm den query string zu ermitteln? danke schon im vorraus und gruß Zitieren
flashpixx Geschrieben 29. Juli 2008 Geschrieben 29. Juli 2008 Verstehe ich das richtig: html form -> perl -> c-programm? In diesem Fall würde ich die Parameter der Querystrings von Perl als Parameter an das C-Programm liefern und im C-Programm via argc und argv lesen. Aber warum so etwas machen? Bleib doch bei Perl oder dem C-Programm Phil Zitieren
kale_1990 Geschrieben 30. Juli 2008 Autor Geschrieben 30. Juli 2008 genau diesen weg möchte ich nicht gehen (argc und argv)....da ich viele programme hab die das c-programm aufrufen und ich dann jeden perl prgramm anfassen müsste. es wird aus performancegründen ein c-programm aufgerufen...die vorgehensweiße ist ja jetz eig. auch egal.... wundere mich nur warum ich HTTP_COOKIE auslesen kann aber QUERY_STRING nicht?!?! Zitieren
flashpixx Geschrieben 30. Juli 2008 Geschrieben 30. Juli 2008 genau diesen weg möchte ich nicht gehen (argc und argv)....da ich viele programme hab die das c-programm aufrufen und ich dann jeden perl prgramm anfassen müsste. Ich halte Dein Vorgehen trotzdem für sehr bedenklich, denn das CGI kann eine große Sicherheitslücke darstellen, vor allem bei eigenen und ungetesteten Code. es wird aus performancegründen ein c-programm aufgerufen...die vorgehensweiße ist ja jetz eig. auch egal.... Was ist an Perl / PHP / Python o.ä. unperformant, so dass Du Perl + C-Programm benötigst? Sieh das bitte nicht als Kritik, sondern wirklich der Hinweis auf ein Sicherheitsproblem, auch das Zitat lässt darauf schließen, dass Dein Vorhaben generell sehr bedenklich ist. wundere mich nur warum ich HTTP_COOKIE auslesen kann aber QUERY_STRING nicht?!?! If the server finds that it cannot send the string due to internal limitations (such as exec() or /bin/sh command line restrictions) the server should include NO command line information and provide the non-decoded query information in the environment variable QUERY_STRING. Überlege Dir vielleicht, ob es nicht einen anderen Weg für die Lösung gibt Phil Zitieren
TDM Geschrieben 30. Juli 2008 Geschrieben 30. Juli 2008 getenv liest doch Umgebungsvariablen aus :confused: Sag jetzt nicht, du speicherst irgendwie den Query_String in einer Betriebssystem-Variable... btw: If the requested variable is not part of the environment list, the function returns a NULL pointer. Zitieren
kale_1990 Geschrieben 30. Juli 2008 Autor Geschrieben 30. Juli 2008 @tdm: wenn du ein c-programm als cgi-programm startest und du z.b. die formulardaten auslesen möchtest machst du das mit getenv()....ich speichere nichts in umgebungsvariablen, ich denke das macht der server!? weißt du einen anderen weg formulardaten mit einem c-programm auszulesen?? @flashpixx: das system wurde mir von meinem vorgänger so übergeben...ich verstehe das mit dem sicherheitsrisiko, leider ist es zur zeit nicht möglich das gesamte system umzubauen, da es ein über jahre aufgebautest, sehr komplexes system ist. da über das c-programm große datenmengen aus der datenbank und komplexe berechnungen ausgeführt werden ist es einfach performanter... die ausgabe und so weiter wird von perl übernommen, da dort die stringverarbeitung angenehmer ist. Zitieren
kale_1990 Geschrieben 30. Juli 2008 Autor Geschrieben 30. Juli 2008 @tdm: zu dem thema hab ich hier noch einen link: http://www-pu.informatik.uni-tuebingen.de/pfi-0506/slides/lecture-04-single.pdf Zitieren
flashpixx Geschrieben 30. Juli 2008 Geschrieben 30. Juli 2008 @flashpixx: das system wurde mir von meinem vorgänger so übergeben...ich verstehe das mit dem sicherheitsrisiko, leider ist es zur zeit nicht möglich das gesamte system umzubauen, da es ein über jahre aufgebautest, sehr komplexes system ist. [sarkasmus an] Das Prinzip "never touch a running system" impliziert dann "lass rumfrickeln, weil noch mal darüber nachdenken wäre zu kompilizier" [sarkasmus aus] da über das c-programm große datenmengen aus der datenbank und komplexe berechnungen ausgeführt werden ist es einfach performanter... die ausgabe und so weiter wird von perl übernommen, da dort die stringverarbeitung angenehmer ist. Nenn' mal eine Hausnummer der Dimensionen. Ich denken ich sehe "groß" und "komplex" etwas anderes. Meine Vorstellung von "groß" wäre pro Lauf mehr als 1*10^5/6/9/12 Datensätze. Komplexe Berechnung wäre z.B. von einer Matrix mit 10.000x10.000 Elemente die Eigenwerte zu berechnen oder Vektoren > 500 Dimensionen. Ich würde an Deiner Stelle hier Sicherheit gegen Konzept stellen, denn ein System das über Jahre gewachsen ist, hat sicher auch einige unschöne Sachen drin, die dringend einer Verbessung bedürfen. Zumal gibt es immer wieder Neuerungen, die man in ein Redesign einfließen lassen kann. Persönlich würde ich, bevor ich nun über mehrere "dirty tricks" das Problem löse, das Problem an der Wurzel anfassen und ein Neukonzept / Teilneukonzept erarbeiten. Gerade bei gewachsener Software fehlt häufig Dokumentation und klare definierte Schnittstellen. Als Ziel wäre somit eine generalisierte Struktur zu schaffen mit einem klaren Design, das eben auch das Sicherheitskonzept berücksichtigt. Phil Zitieren
TDM Geschrieben 30. Juli 2008 Geschrieben 30. Juli 2008 @tdm: wenn du ein c-programm als cgi-programm startest und du z.b. die formulardaten auslesen möchtest machst du das mit getenv()....ich speichere nichts in umgebungsvariablen, ich denke das macht der server!? weißt du einen anderen weg formulardaten mit einem c-programm auszulesen?? Achso, naja die Kombi aus HTML, CGI und C verwende ich nie. Hatte mich nur gewundert. Warum eigentlich ein ganzes C-Programm? Kannst du das nicht in dlls auslagern und via CGI/Perl aufrufen? Zitieren
kale_1990 Geschrieben 31. Juli 2008 Autor Geschrieben 31. Juli 2008 @tdm: dll??? kenn ich nicht ;-) nein spaß, windows is hier nicht!!! @flashpix: ich geb dir völlig recht, nur ist ein redesign gerade zeitlich nie und nimmer möglich(leider)!!! Zitieren
flashpixx Geschrieben 31. Juli 2008 Geschrieben 31. Juli 2008 Wenn Du beides ausschließt, dann gibt es wohl keine "sinnvolle" Lösung. Generell möchte zu einem "nie" nur sagen, "sag niemals nie". So wie ich das betrachte, ist das System auf eine feste Plattform entwickelt worden. Was passiert, wenn die Plattform nicht mehr (in der aktuellen Form) unterstützt wird, dann muss ein redesign gemacht werden oder das System komplett ersetzt werden. Wenn das nun eine inHouse-Lösung ist, kann man nicht einfach in eine Standardlösung ersetzen. Phil Zitieren
TDM Geschrieben 1. August 2008 Geschrieben 1. August 2008 @tdm: dll??? kenn ich nicht ;-) nein spaß, windows is hier nicht!!! Hab ich auch mitgekriegt. Und? Meines Wissens nach benutzt Linux auch Dlls. Zitieren
flashpixx Geschrieben 1. August 2008 Geschrieben 1. August 2008 Meines Wissens nach benutzt Linux auch Dlls. naja aber da sind es ".la" Dateien (OSX *.dylib). Außerdem kann ich ja schlecht eine DLL von Windows nehmen und unter Linux direkt verwenden *g* Bsp: OpenGL.dll Phil Zitieren
TDM Geschrieben 1. August 2008 Geschrieben 1. August 2008 Außerdem kann ich ja schlecht eine DLL von Windows nehmen und unter Linux direkt verwenden Deswegen in C selber eine schreiben und unter Linux kompilieren. Oder anderweitig diese dylibs erzeugen. Wär zumindest nur so ein Gedanke. Zitieren
flashpixx Geschrieben 1. August 2008 Geschrieben 1. August 2008 Deswegen in C selber eine schreiben und unter Linux kompilieren. Oder anderweitig diese dylibs erzeugen. Wär zumindest nur so ein Gedanke. Ich persönlich bin da auch für das "selber" schreiben, optimal wenn es Cross sein soll ist wirklich Qt. Aber im den Bezug zum Post nicht zu verlieren, müsste mal wohl mal das ganze System analysieren, um es zu optimieren Ich denke nämlich nicht dass es modular aufgebaut ist, sondern eher hardcoded Phil Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.