1

我有一个 SWF 文件,它允许用户在我的网站上上传文件。该 SWF 向我的服务器上发送一个 POST 请求upload.php,从而上传文件。

但在此之前,在 upload.php 中,我想确保执行此操作的人是signed in. 目前,我检查了SID cookie value请求标头中发送的内容,并根据我的数据库中的 SID 值检查了一个条目(我将会话存储在数据库中)。我工作得很好chrome但失败了,firefox因为当 SWF 生成请求时它不发送任何 cookie 标头。

我该怎么办。感谢帮助。

在 Chrome 中发送的标头

Content-Length: 355894
Origin: http://localhost 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52
Content-Type: multipart/form-data; boundary=----------ei4Ij5ae0ae0ei4Ef1Ef1KM7GI3Ef1 
Accept: */* 
Referer: http://localhost/home Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie: PHPSSID = 238e320eewbjdbew923e092ejhwbjhwebd

在 FireFox 中发送的标头

Accept: text/* 
Content-Type: multipart/form-data; boundary=----------GI3Ef1Ef1ae0GI3cH2Ef1Ef1cH2KM7 
User-Agent: Shockwave Flash 
Host: localhost 
Content-Length: 355894 
Connection: Keep-Alive 
Cache-Control: no-cache
4

1 回答 1

0

这是 Chrome 的一个功能,但不是 FireFox 的一个错误。上传 SWF 必须明确发送浏览器 cookie。查看从 3.0 版开始的 FancyUpload。

另请注意,如果 User-Agent 标头不等于浏览器,则带有 suhosin 的 PHP 可以删除会话变量。这称为“会话固定”。所以上传 SWF 也必须在请求期间向浏览器发送用户代理(或者只是禁用 suhosin 补丁)。

于 2013-01-22T00:40:55.973 回答