2010-05-23 50 views
4

根據RFC 2109,2965 cookie的值可以是HTTP令牌或帶引號的字符串,並且令牌不能包含非ASCII字符。爲什麼非法cookie由瀏覽器發送並由網絡服務器接收(rfc 2109,2965)?

  1. Cookie的RFC 2109RFC2965
  2. HTTP的RFC 2068和2616令牌定義:http://tools.ietf.org/html/rfc2616#page-16

不過,我已經發現,Firefox瀏覽器(3.0.6)將餅乾UTF-8字符串原樣是 和我測試的三個Web服務器(apache2,lighttpd,nginx)將該字符串原樣傳遞給 應用程序。

例如,從瀏覽器的原始請求:

$ nc -l -p 8080 
GET /hello HTTP/1.1 
Host: localhost:8080 
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.9) Gecko/2009050519 Firefox/2.0.0.13 (Debian-3.0.6-1) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: windows-1255,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
Cookie: wikipp=1234; wikipp_username=ארתיום 
Cache-Control: max-age=0 

和Apache,Nginx的lighttpd的和CGI HTTP_COOKIE變量的原始響應:

wikipp=1234; wikipp_username=ארתיום 

我怎麼錯過?根據Internet Official Protocol Standards (STD 1, RFC 5000)

+2

這是互聯網。人們使用這些標準在usenet上阻止他人,而不是實施他們的軟件。 – jrockway 2010-05-23 04:11:10

+1

@jrockway我會理解,如果這是一個Web服務器,但所有3最流行(Linux)的? – Artyom 2010-05-23 04:14:29

回答

3

RFC 2109(Feb 1997)已經過時並被RFC 2965(2000年10月)取代。

您還可能有興趣在近期的March 7, 2010 draft修改2965

令牌在2965唯一的定義是:

非正式,非特殊的序列,非 - 白色的空格字符

我不認爲UTF-8的整體被該定義所禁止 - 只有可能被誤認爲是控制/語法的字符ch aracters。

+0

但是根據新的RFC值仍然是令牌或引號對,所以它不能解決我的問題 – Artyom 2010-05-23 04:01:30

+0

完整引用:「以下語法使用符號和令牌DIGIT(十進制數字),令牌(非正式地,非序列 - 特殊的非空白字符)以及來自HTTP/1.1規範[RFC2616]的http_URL來描述它們的語法。「 - 因此很顯然,令牌**指的是RFC2616(http),並且它禁止令牌爲非assci – Artyom 2010-05-23 04:37:51

+0

並且您鏈接到的草稿中的BTW更加清晰,根據ro 2616 HTTP/1.1 RFC – Artyom 2010-05-23 04:43:37

1

RFC 2965已被廢棄RFC 6265。根據此rfc:

cookie名稱必須是一個令牌,它由可打印ascii字符組成,不包括 ()<> @, :\「/ []?= {} SPACE TAB

該cookie值包含可打印ascii字符而不包含SPACE」,「 \有被引號包圍的可能性

相關問題