- From: =JeffH <Jeff.Hodges@KingsMountain.com>
- Date: Tue, 14 Jul 2009 16:59:37 -0700
- To: HTTP Working Group <ietf-http-wg@w3.org>
[these comments are intended to be complimentary to the ones by Mark Nottingham]
substantive questions/comments:
0. when using term "host" in the spec (e.g. in Sec 2), do you syntactically
mean <host> from [RFC3986]...
host = IP-literal / IPv4address / reg-name
? (see also comment 6 below)
1. the spec should have a section defining the sec-from header per se
(presently it's only introduced in context in Sec 5), and its syntax in ABNF
[RFC5234]. Here's a quick example of the latter (dunno if exactly correct, and
depends on syntax decisions you make)...
sec-from = "sec-from" ":" 1*WSP [ "null" / origin-list ]
origin-list = delim-serialized-origin *( 1*WSP delim-serialized-origin )
delim-serialized-origin = "<" serialized-origin ">"
serialized-origin = scheme "://" host [ ":" port ]
; <scheme>, <host>, <port> productions from RFC3986
2. wrt question on list re how to delimit variable names in text -- if you use
ABNF, then there is IETF precedence for using <rulename> in text (see [RFC2616]
for example; plus there may be such precedence w/o explicitly using ABNF in a
spec).
3. given the ABNF, it may be "easier" to construct a declarative style spec,
but it wouldn't necessarily rule out algorithmic style (will help make the
latter more clear imv).
4. in sections 4 & 5, U+006E, U+0075, U+006C, U+006C ("null") is properly not a
"character sequence" but a "code point sequence", yes? Thus the actual
serialized octet sequence for such a sequence (string) will differ depending on
the actual encoding used, e.g. utf-8 vs utf-16, AFAIK. Also, HTTP header fields
default to using US-ASCII characters unless the header field value is
explicitly defined to be of type *TEXT. Thus I suggest that the "null" in the
<sec-from> production above is sufficient and correct (it is US-ASCII encoded
per RFC5234), and the U+006E, U+0075, U+006C, U+006C code points should be
removed from the spec.
6. in sections 4.1 & 4.2, the spec references the "IDNA ToUnicode algorithm"
and the "IDNA ToUnicode algorithm" (both of [RFC3490], which needs to be cited,
too). This is confusing because the proper reference point in RFC3490 is
Section 4 "Conversion Operations" which contains both of those algorithms, as
well as specifying steps that need to be taken around invocation of either of
those algorithms.
Additionally, RFC3940 is only about DNS domain names, and so the results of
running <host> values matching the <IP-literal> or <IPv4address> productions
(RFC3986) through it are undefined AFAIK (I asked Paul Hoffman today and that's
what he said).
Here's step 4 of your sec 4.2 re-written to accommodate the above...
4. If the value of the <host> origin tuple component is
in the form of a DNS domain name, apply the IDNA conversion
algorithm ([RFC3490] section 4) to it, with both the
AllowUnassigned and UseSTD3ASCIIRules flags set, employ
the ToASCII operation, and append the result to /result/.
..though the overall algorithm in draft-abarth-origin may need further tweaking
wrt running IP addresses thru it.
7. Section 5 -- "privacy-sensitive" context is undefined. It is implicitly
vaguely defined in sec 7. Also, assuming a definition exists, how does some
given UA "know" whether it is "in" a privacy-sensitive context ?
8. We should define exactly what is meant by "an HTTP redirect from URI" foo
(sec 5). E.g. given foo is the Request-URI in the Request-Line of an HTTP
message sent to a host:port, then "HTTP redirect from URI foo" is the returned
HTTP response message from said host:port containing a 3xx Status Code (all
terms RFC2616).
9. In the 2nd Step 2 in Sec 5, where it says "...unless
this would result in the header containing the origin
serialization "null". "
Do you mean to say..
...unless
this would result in the header containing the origin
serialization "null" as any component value?
?
10. Until I very carefully re-read the algorithm and its immediately preceding
paragraph in Sec 6, I didn't realize that the "[MUST NOT / MAY] modify state"
return values _are not_ intended to be sent over the wire to the client.
Could suggest mods, but want to wait until decision is made on whether to
re-write spec in non-algorithmic style.
11. in sec 7 "privacy considerations" this claim is made..
"The Sec-From header also improves on the Referer header by NOT
leaking intranet host names to external Web sites..."
..but isn't it not the "sec-from" header per se that is doing this, rather,
it's the overall behavior/policy specified by the spec that's providing such
protection, depending though upon yet-to-be-defined means for determining
whether any given HTTP request generated by a UA is "in a privacy-sensitive
context" or is "a privacy-sensitive request" ?
12. sec 8 "sec cons" says in part, "This design prevents an attacker from
making a supporting user agent appear to be a non-supporting user agent."
But this is only a certain class of attacker, not _any_ attacker (I presume).
The former being the class that controls some website that issues CSRF requests
(via whatever means (<form>, .js, etc.)), but otherwise has no means to subvert
the UA, e.g. turn off sec-from issuance. The latter of course relies on correct
UA implementation.
Probably worthwhile to have a "threat analysis" (sub)section along with a
description of CSRF (as suggested below).
Editorial comments:
1. I'd have both normative & informative references, and in the latter include
a cite for at least..
Robust Defenses for Cross-Site Request Forgery
http://www.adambarth.com/papers/2008/barth-jackson-mitchell-b.pdf
..also perhaps cite..
http://www.cgisecurity.com/csrf-faq.html
2. In addition to Mark's comment of..
It would be helpful to give more information about the use case and
applicability of this header in the Introduction.
..I'd add that a clear and detailed description of CSRF itself would be quite
helpful.
3. "Unicode Serialization of an Origin" is not employed in the spec as yet --
if it remains unused, I'd explain that it is there for reference, e.g. from
other specs, if needed. (and if there's reasonable expectation of needing it in
future (otherwise remove it)).
4. various minor spelling and grammar errors (e.g. missing words), but that can
be cleaned up at a later stage.
HTH,
=JeffH
Received on Wednesday, 15 July 2009 00:00:14 UTC