Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-10-2005, 10:07   #1 (permalink)
elephpant
 
Registriert seit: Aug 2003
Ort: Vlbg, Ö
Beiträge: 55
Exclamation Flash8 Upload und Security

Hallo!

Habe ein mittelschweres Problem. Ich verstehe wie die FileReference-Klasse zu verwenden ist, habe mehrere Beispiele heruntergeladen und auch selbst mit Flash ein Upload-Tool umgesetzt. Funktioniert prima.

Im Serverseitigen PHP-File habe ich danach zusätzlich eine Authentifizierung via PHP-Sessions eingebaut.

Login über Flash mit einem neuen LoadVars-Objekt (daten per post) funktioniert. Logout ebenfalls. Ich lasse PHP einen Log schreiben der mir die Session-ID die PHP vergibt speichert und welche Aktion der Benutzer ausführt (Login, Logout, Upload) damit ich das mit Sicherheit sagen kann.

Ich habe festgestellt (und nun zum eigentlichen Problem), dass bei Verwendung des LoadVars-Objekts eine andere Session-ID vergeben wird, als mittels Upload-Methode der FileReferences-Klasse.

Habt ihr eine Ahnung, was da vor sich geht? Denn wenn sich das nicht irgendwie lösen lässt, lässt sich jeder Flash-Upload hacken, wenn man nicht eine HTTP-Authentifizierung verwenden will (oder kann).
__________________
UNIX rules
mast ist offline   Mit Zitat antworten
Alt 06-10-2005, 11:00   #2 (permalink)
Neuer Benutzer
 
Benutzerbild von webxvideo
 
Registriert seit: Nov 2003
Ort: berlin
Beiträge: 883
Wenn Du per loadVars eine PHP-Seite aufrufst werden keine Cookie's übertragen. Somit wird auch keine Session-ID weitergegeben und php vergibt dann eine neue.
Du must also die Session-ID vorher in Flash speichern und dann im LoadVars-Objekt als GET-String anhängen.
webxvideo ist offline   Mit Zitat antworten
Alt 06-10-2005, 11:32   #3 (permalink)
elephpant
 
Registriert seit: Aug 2003
Ort: Vlbg, Ö
Beiträge: 55
Das scheint die einzige möglichkeit zu sein. Übergabe der Session-ID an Flash ist aber kritisch, weil das ein angriffspunkt für session-fixation oder session-phishing wäre. Deshalb suche ich nach einer Möglichkeit wie das ganze funktioniert, ohne dass ich irgendwas an die urls anhängen muss. Leider scheint dies derzeit wie gesagt die einzige Möglichkeit zu sein.

Ich möchte nicht böse klingen, aber die Cookies scheinen doch mitüberliefert zu werden. Ich habe in meiner Flashanwendung zwei Buttons und eine Textarea um den Status abzufragen. Das PHP-Skript ist so konfiguriert, dass es entsprechende Variablen zurückliefert:

ActionScript:
  1. loginBtn.addEventListener("click", logIn);
  2. logoutBtn.addEventListener("click", logOut);
  3.  
  4. // Log the user in
  5. function logIn() {
  6.     lv = new LoadVars();
  7.     lv.username = usernameTxt.text;
  8.     lv.password = passwordTxt.text;
  9.     lv.sendAndLoad(_root.basePath + "login.php", lv, "POST");
  10.     lv.onLoad = function() {
  11.         if (lv.allowed == 1) {
  12.             statusArea.text += "Log in successfull.\n";
  13.         } else {
  14.             statusArea.text += "Access denied\n";
  15.         }
  16.     }
  17. }
  18.  
  19. // Log the user out
  20. function logOut() {
  21.     lv = new LoadVars();
  22.     lv.logout = "1";
  23.     lv.sendAndLoad(_root.basePath + "login.php", lv, "GET");
  24.     lv.onLoad = function() {
  25.         if (lv.success == 1) {
  26.             statusArea.text += "Log out successfull and necessary.\n";
  27.         } else {
  28.             statusArea.text += "Log out not necessary\n";
  29.         }
  30.     }
  31. }

Wie 1. aus dem was in die textArea hineingeschrieben hervorgeht und 2. aus dem was der log auf der Server-Seite schreibt, geht hervor, dass die Selbe Session-ID verwendet wurde (beim klick auf beide buttons). Also dass Der Benutzer tatsächlich über das Session-Cookie eingelogt ist (Sonst würde beim Drücken auf Logout "Log out not necessary" ausgegeben werden - wirds aber nicht).

Das interessante ist, dass beim Upload (im selben swf) eine neue Session-ID vergeben wird. Wenn es tatsächlich die einzige möglichkeit ist, die Session-ID hier über die URL zu übergeben, ... weiss nicht - kann man das so bedenkenlos machen??
__________________
UNIX rules
mast ist offline   Mit Zitat antworten
Alt 06-10-2005, 11:46   #4 (permalink)
the journey continues...
 
Benutzerbild von Attila [derErschaffer]
 
Registriert seit: Oct 2001
Ort: Österreich, Wien, District 10
Beiträge: 2.392
ich hab das bis jetzt in flash 8 noch nicht ausprobiert, aber...

man kann ja sowieso nur das uploaden was du zulässt, zB jpg mit maximal 100KB oder was auch immer...selbst wenn das jemand hackt hätte es keinen nutzen...was sollte er denn damit anfangen

und da man sowieso zuerst sich einloggen muss bei deiner version kann es eh kein anderer als der eingeloggt ist...
__________________
[*]Browser _ IE 7
[*]FlashPlayer 10
[*]Intel Core Duo 2,4GHZ, VISTA Ultimate 64bit
Attila [derErschaffer] ist offline   Mit Zitat antworten
Alt 06-10-2005, 12:02   #5 (permalink)
elephpant
 
Registriert seit: Aug 2003
Ort: Vlbg, Ö
Beiträge: 55
solang niemand anderer an die session-id ran kommt hast du recht. di session-id direkt in den urls ist glaube ich trotzdem nicht so unbedenklich - immerhin wird das ja dann z.b. von proxies gespeichert. vielleicht kann man das dann auch durch sniffen rauskriegen?

das mit der dateiauswahl stimmt für flash. Aber wenn ich als hacker hergehe, und nicht das orignal verwende sondern mir selber ein uploadscript bastle, kann ich alles hochladen, sofern ich serverseitig nicht die selben beschränkungen gemacht habe wie im Flash (was ich gemacht habe, aber ich wills nur zur komplettheit sagen).
__________________
UNIX rules
mast ist offline   Mit Zitat antworten
Alt 06-10-2005, 12:21   #6 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
ein hacker kann dateien hochladen- so schlimm wirds doch wohl nicht sein oder du ergreifst noch andere sicherheits maßnahmen. es ist halt ein allgemeines problem das flash halt auf der clientseite ist und somit offen und einsehbar.

es gibt ja mittlerweile schon seit jahren diskussionen zu sicheren highscore listen - was wohl das verbreitetste sicherheits problem darstellt. ne menge dazu auch hier im forum. lies dir das alles mal ruhig durch, is echt interessant, und vorweg - DIE sichere lösung gibt es (noch) nicht

gruß maddin
__________________
www.madflanderz.de

ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°` _ addicted to bass _ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
madflanderz ist offline   Mit Zitat antworten
Alt 06-10-2005, 13:13   #7 (permalink)
elephpant
 
Registriert seit: Aug 2003
Ort: Vlbg, Ö
Beiträge: 55
also mal vielen dank für eure Antworten!

ich habe es jetzt so gelöst, dass ich die Session-ID in flash speichere und mit der URL als get-Parameter übergebe.

ganz gefallen tut mir aber nicht. wie auch immer, es funktioniert! und das zählt.

das problem mit dem file-upload ist immer, dass es vielleicht irgendwer schaffen könnte php-skripts hochzuladen, und das ist heikel. aber solang die datei nicht die php-extension hat, funktioniert es eh nicht, und das check ich ja im php-file nochmals zur sicherheit nach.

nochmal danke! lg,ma
__________________
UNIX rules
mast ist offline   Mit Zitat antworten
Alt 06-10-2005, 13:43   #8 (permalink)
the journey continues...
 
Benutzerbild von Attila [derErschaffer]
 
Registriert seit: Oct 2001
Ort: Österreich, Wien, District 10
Beiträge: 2.392
Zitat:
Zitat von mast
Aber wenn ich als hacker hergehe, und nicht das orignal verwende sondern mir selber ein uploadscript bastle, kann ich alles hochladen, sofern ich serverseitig nicht die selben beschränkungen gemacht habe wie im Flash (was ich gemacht habe, aber ich wills nur zur komplettheit sagen).
wer serverseitig nicht die selben einschränkungen hat oder es nicht überprüft was hochgeladen wird gehört gefoltert

nur ein gedanke:

"die session wird ja jedesmal neu erzeugt wenn er sich einloggt, dh wenn ich flash die session-ID schicke (wie auch immer) kann er sie mir mit post zB zurück schicken in die upload.php und dort überprüfe ich ob es tatsächlich das flash von der html seite ist...bevor ich upload durchführe" warum du das über die url machst verstehe ich nicht ganz...
__________________
[*]Browser _ IE 7
[*]FlashPlayer 10
[*]Intel Core Duo 2,4GHZ, VISTA Ultimate 64bit
Attila [derErschaffer] ist offline   Mit Zitat antworten
Alt 06-10-2005, 14:00   #9 (permalink)
elephpant
 
Registriert seit: Aug 2003
Ort: Vlbg, Ö
Beiträge: 55
hm - soweit ich weiss stimmt es nicht ganz, dass die session-id jedesmal neu vergeben wird, wenn sich der benutzer neu einlogt.

die session-id wird vergeben, wenn der benutzer z.b. aus einem neuen browser-fenster auf die php-datei zugreift. siehe http://www.php.net/session_start und weiterführende links.

Ich muss es aus folgenden gründen über die URL machen:
. Ich will, dass sich der benutzer zuerst authentifizieren muss, bevor er den upload startet. Vorteil: Er kann mehrere Uploads machen, ohne, dass er sich ständig aus und einlogen muss.
. die fileReference-Klasse lässt es nicht zu zusätzliche POST-Parameter mitzuschicken, oder ich weiss nicht wie es geht

deshalb muss ich die sessionID, die ich beim authentifizierungsvorgang in flash speichere beim upload als get-parameter mitschicken.

Normalerweise sollte die SessionID in einem Cookie automatisch übermittelt werden. Wie ich aber festgestellt habe, wird beim Aufruf der upload-Methode von php eine neue sessionID vergeben, was ich mir nicht anders vorstellen kann, als dass flash irgendwie etwas macht, dass php glaubt, der zugriff käme von wo anders, als von der stelle von der die authentifizierung ursprünglich durchgeführt wurde (was eigentlich im gleichen SWF abläuft). Das ist der eigentliche Ursprung meines Problems...
__________________
UNIX rules
mast ist offline   Mit Zitat antworten
Alt 06-10-2005, 16:24   #10 (permalink)
the journey continues...
 
Benutzerbild von Attila [derErschaffer]
 
Registriert seit: Oct 2001
Ort: Österreich, Wien, District 10
Beiträge: 2.392
Zitat:
Zitat von mast
hm - soweit ich weiss stimmt es nicht ganz, dass die session-id jedesmal neu vergeben wird, wenn sich der benutzer neu einlogt.

die session-id wird vergeben, wenn der benutzer z.b. aus einem neuen browser-fenster auf die php-datei zugreift. siehe http://www.php.net/session_start und weiterführende links.
habs falsch gesagt aber richtig gemeint *g* ich meinte damit das die session die ganze zeit über die selbe ist solange er auf der hp arbeitet und den browser nicht schließt...




Zitat:
Zitat von mast
Ich muss es aus folgenden gründen über die URL machen:
. Ich will, dass sich der benutzer zuerst authentifizieren muss, bevor er den upload startet. Vorteil: Er kann mehrere Uploads machen, ohne, dass er sich ständig aus und einlogen muss.
. die fileReference-Klasse lässt es nicht zu zusätzliche POST-Parameter mitzuschicken, oder ich weiss nicht wie es geht
musst ja nicht über die filereference klasse machen...kannst ja vorher schon normal aufrufen und wenn es passt gibts du ein ok zurück und dann macht er den upload
__________________
[*]Browser _ IE 7
[*]FlashPlayer 10
[*]Intel Core Duo 2,4GHZ, VISTA Ultimate 64bit
Attila [derErschaffer] ist offline   Mit Zitat antworten
Alt 07-10-2005, 07:18   #11 (permalink)
elephpant
 
Registriert seit: Aug 2003
Ort: Vlbg, Ö
Beiträge: 55
sorry, bin in flash nicht so der profi... wie würdest du das schon vorher aufrufen?

ich dachte, dass ich das mit loadVars mache, weil ich keine andere Möglichkeit gefunden habe ein Serverseitiges PHP-Skript aufzurufen (kenne leider auch nicht alle Internetreferenzen). Die ganzen PHP-Schnittstellen für Flash (AMFPHP, PHPObject, usw) erfüllen nicht den Zweck den ich brauche.

Denn wie gesagt, wenn ich das ganze schon vorher aufrufe (eben z.b. über loadVars) dann wird mir beim Aufruf der upload-methode der filereferences-klasse eine neue session-id am server erzeugt, und ich weiss nicht woran das liegt.
__________________
UNIX rules
mast ist offline   Mit Zitat antworten
Alt 07-10-2005, 13:12   #12 (permalink)
the journey continues...
 
Benutzerbild von Attila [derErschaffer]
 
Registriert seit: Oct 2001
Ort: Österreich, Wien, District 10
Beiträge: 2.392
loadVars passt eh, ich weiss jetzt nicht wie du die sessionID übergibst, aber ich zeig mal wie ich glaube das es möglich ist...


ActionScript:
  1. //die sessionID habe ich bereits geholt, wie auch immer...
  2. //und steht in VAR_PRUEFEN drinnen und jetzt kommt das überprüfen vom upload...
  3.  
  4.  
  5. function upload_ja_nein() {
  6.         up = new LoadVars();
  7.         up.sessionID_anPHP = var_pruefen;
  8.         up.sendAndLoad("upload.php", up, "POST");
  9.         up.onLoad = function() {
  10.                 if (up.allowed == 1) {
  11.                         // upload ist möglich
  12.                         var_upload = "true";
  13.                 } else {
  14.                         // upload nicht möglich
  15.                         var_upload = "false";
  16.                 }
  17.         }
  18. }
  19.  
  20.  
  21. function upload_start() {
  22. // .........der upload halt......auch mit der upload.php
  23. }
  24.  
  25.  
  26.  
  27. upload_ja_nein();
  28.  
  29. if (var_upload) {
  30.         upload_start();
  31. }

das überprüfen und upload muss in derselben php datei stehen, weil wenn es getrennt wäre kann ich ohne probleme wieder auf die upload.php zugreifen...

das überprüfen muss als erstes in der upload.php datei stehen und wenn dann flash die sessionID an die upload.php schickt musst du mit einer session_var ein OK setzten damit beim nächsten mal die upload.php nicht mehr überprüft ob es stimmt...

du kannst nämlich so oft du willst die upload.php aufrufen in flash, aber in der upload.php datei muss der ablauf auch stimmen, hoffe das ist irgendwie verständlich
__________________
[*]Browser _ IE 7
[*]FlashPlayer 10
[*]Intel Core Duo 2,4GHZ, VISTA Ultimate 64bit
Attila [derErschaffer] ist offline   Mit Zitat antworten
Alt 21-10-2005, 06:17   #13 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 11
Wie wäre es damit

Ne Sicherheitsmethode die of gemacht wird:
  • Benutzer kommt auf index.php => $_SESSION['sessionID'] wird generiert (lifetime 5min)
  • Flash lädt die sessionID über ein phpscript (direkt über URL ist *******e)
  • Bei jedem PHP Aufruf wird die sessionID über post mitgeschickt (LoadVars)
  • Läuft die sessionID nach 5min wird eine neue generiert und beim nächsten Aufruf an Flash zurückgegeben


Vorteile:
  • Normaler Benutzer bekommt sessionID nicht zu gesicht
  • Selbst wenn sessionID bekannt ist, wird es schwer über Header Daten (aus Flash heraus) etwas zu "hacken"

ist ne ziemlich einfache Methode, und da beim Fileupload eh nur files an $_FILES übertragen wird kannst du in php einfach nochmal überprüfen ob alles stimmt, er kann keinen "hackercode" über $_FILES einschleusen
11notes ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 23:05 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele