Zum Inhalt springen

http daten empfangen


kale_1990

Empfohlene Beiträge

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ß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?!?!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

@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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...