Andreas Korthaus: Probleme mit POST Header (multipart/form-data)

Beitrag lesen

Hi!

Was ich sagen wollte:

0004  F9 94 E6 56 4E E5 50 18 7F FF C2 E1 00 00 50 4F    {gesnippt}

Leider hast du den Anfangsteil der die TCP- und IP-Header mit unter anderem der Portnummer enthält größtenteils weggeschnitten. Das ist aber auch egal, denn das sieht nicht verschlüsselt aus, ist also kein HTTPS und damit eh ungewollt.

Naja, ich bezweifele das Du da was erkannt hättest, zumindest mein sniffer schreibt da grostes Kauderwelsch! "POST" ist das erste Wort was man lesen kann.

0006  20 48 54 54 50 2F 31 2E 30 0D 0A 48 6F 73 74 3A     HTTP/1.0..Host:
0007  20 68 74 74 70 73 3A 2F 2F 77 77 77 2E 6B 6E 65     https://www.kne

So wie ich RFC 2616 lese, darf der Host:-Header auch keine Protokollangabe enthalten, dieser Header somit tatsächlich kaputt.

Ja, das war auch nur ein frei erfundener test mit fsockopen, da ssl:// nicht geklappt hat! Also ist das so auch nicht richtig. Ich versteh zumindest diesesn Fehler, ich schicke den Request an den SSL-Serverport, und da der Header nicht ssl-verschlüsselt und sowieso ganz falsch ist bekomme ich den bad Request. Eine Sackgasse also.

000D  32 36 31 0D 0A 0D 0A 62 6C 61 6B 0D 0A 43 6F 6E    261....blak..Con

Fehlen vor dem blak da nicht noch -- oder bin ich wieder verwirrt?

Nein, Du hast Recht, die Fehlern. Die habe ich beim testen wieder entfernt, denn ich hatte einen Request(File Upload Formular) den Mozilla geschickt hatte mal angesehen und den habe ich versucht genau nachzubilden. Das problem lag ja bei contend-Length, die Unterschiede zu Mozilla und Deiner Version waren halt diese "--" und das ";" statt "," irgendwo ich glaube vor dem ersten booundary. Aber diese Änderungen haben wie gesagt nichst gebracht, und ich habs einfach noch nicht wieder rückgängig gemacht! Aber so wie es da steht hat es mit reinem http funktioniert.

Mag sein das ich blind bin, aber wo steht da der Port 443 den ich richtigerweise fsockopen() mitgegeben habe? 443 ist 100%ig der SSL-Port!

Den Port hast du weggeschnitten. ;-)

Leeider kann ich keien binärdaten lesen, oder was auch immer diese Kauderwelsch zu sagen hatte!

Also verstehe ich das Richtig das der Port nichts mit dem http-header zu tun hat sondern nur mit dem TCP/IP header und nur darin enthalten ist? Denn der HTTP Header fängt ja erst bei "POST..." an, oder?

IWe gesagt komme ich da leider nicht an die error-log. Porblem ist das die Error.log nicht nach Kunden getrennt werden kann.

Wenn du dir den Server mit anderen Kunden teilst, darfst du dich bei der Authentifizierung ohnehin nicht allein auf die IP-Addresse verlassen, da die ja auch von 127.0.0.1 kommen können.

Stimmt, aber das kann ich eh vergessen, siehe Posting, ich muß die offizielle IP verwenden.

Ich habe nochmal news.txt gelesen, da steht definitiv:

  • PHP now has a new stream system that allows it to do some clever stuff with
      fopen() and fsockopen().  As a result:
      . URL wrappers natively supports https:// URLs
      . fsockopen() adds support for ssl:// and tls:// connections via TCP/IP

Ich habe mir eben auch einen aktuellen PHP-Snapshot gezogen und da ist mir aufgefallen: In dem Text steht, dass URL Wrapper (also fopen(), file()...) mit https gehen sollten, du bei fsockopen aber ssl: oder tls: nehmen musst. Du darfst die beiden Einträge nicht vermixen. Ich habe es auch versucht und scheinbar geht beides nicht, wahrscheinlich ist das Stream-Gezeugs noch nicht fertig. Also würde ich sagen: Schauen warum der SSH-Tunnel nicht geht und warten.

Ja, ich habe einfach beides versucht, und ich habe auch vorher in der  Doku gelesen, habe ss:// auch als erstes verucht, ging ja nicht, also habe ich mehr oder weniger aus Verzweiflung mal https:// probiert ;-) Aber ich habe das schon richtig verstanden, nur ein ssl:// davor und den SSL-Port und schon geht derselbe header über SSL, oder?

Wie gesagt, openssl-modul ist gegeben.

Ja, ich habe auch mal eine OpenSSL-Funktion aufgerufen und scheint wirklich drin zu sein, wenn phpinfo() das sagt (zumindest ist mir nichts in Gesicht geflogen). Schau dir also mal http://www.php.net/manual/en/ref.openssl.php an, ob du damit auch weiterkommst, zumal man dafür kein so neues PHP braucht, solange die Extension installiert ist. Wenn du schon dabei bist, kannst du eigentlich auch gleich mcrypt nehmen. Ein Rjindael (==AES) mit ordentlicher Schlüssellänge erscheint mir subjektiv doch deutlich angenehmer als der von openssl_seal() verwendete RC4 (== der Algorithmus der WEP zum Verhängnis wurde).

Ich vermute fast das es darauf hinaus laufen wird. Es war sogar mal im Gespräch das ganze mit GPG zu ver- und entschlüsseln, aber das ist wirklich nicht so einfach, vor allem ist das recht kompliziert auf ein anderes System zu portieren, wegen der Schlüssel, den Einstellungen in GPG... obwohl es da wohl auch eine symetrische Verschlüsselung geben soll, fändest Du das denn besser als mcrypt und SSL und SSH? Aber ich würde ganz gerne innerhalb von PHP bleiben um Probleme mit den Schnittstellen wie bei cURL möglichst aus dem Weg zu gehen.

Nunja, ich habe mir also gerade mcrypt mal angesehen.
Da steht ja ein komplettes Beispiel: http://www.php.net/manual/en/function.mcrypt-module-open.php

Jetzt Frage ich mich wie man deises Beispiel auf 2 Servern verwenden kann, halt auf dem einen verschlüsseln, auf dem anderen entschlüsseln. Das ganze ist abgängig von 3 Variablen:

$iv, $key, $td. Die Frage ist ob ich alle 3 Variablen auf dem anderen Servern genau so generieren kann, was vermutlich nicht gehen sollte, da das System sonst recht unsicher wäre, oder?

Und sowas im Klartext mit zu übertragen ist noch viel schlimmer!

openssl muß ich gestehen verstehe ich nich nicht so recht wie ich das anwenden soll: http://www.php.net/manual/en/function.openssl-seal.php, da ist ja auch ein nettes Beispiel, da steht halt wie ich einen schlüssel erstelle, und dann free key, aber was sollte die ganze Aktion jetzt? Sende ich mit openssl die daten direkt wie mit fsockopen, und der SSL-Server erkennt das selbst und ich habe auf dem entgegennehmenden PHP-Script die Daten ganz normal zur Verefügung, doer muß ich auch hier den Datenstring verschlüsseln, was ja eigentlich reichen würde!

So langsam wie die letzten Tage bin ich noch nie vorwärts gekommen. War aber wenigstens lehrreich(vor allem dank Dir!)

Ich danke, da ich auch viel lerne.

Das freut mich sehr!

Viele Grüße
Andreas