thx for the comments Julian.

> On 2011-09-14 23:08, =JeffH wrote:
>>  > a few questions about the header field syntax:
>>  >
>>  > Strict-Transport-Security =
>>  > "Strict-Transport-Security" ":" OWS STS-v OWS
>>  >
>>  > So the header field is *not* using the RFC2616 list syntax. So you
>> can have
>>  >
>>  > Strict-Transport-Security: a; b
>>  >
>>  > but *not*
>>  >
>>  > Strict-Transport-Security: a
>>  > Strict-Transport-Security: b
>>  >
>>  > because that would be equivalent to
>>  >
>>  > Strict-Transport-Security: a, b
>>  >
>>  > (is this intentional?)
>>
>> well, it was not necessarily intentional as far as I recall. We either
>> managed to overlook, or regarded as inappropriate for this header, the
>> RFC2616 list syntax (i.e., the "#rule"), that defines such implicit
>> comma-separated lists.
>> Also, we'd noted that quite a number of header field definitions used
>> semi-colons as a delimiter, but perhaps hadn't noted that those overall
>> productions often are embedded within such comma-separated lists.
>
> Yes, that's the list-of-parametrized-things format.
>
>> However, in thinking about it a little bit, for this particular header
>> field, as it's presently defined, it doesn't seem appropriate to have it
>> explicitly be comma-separated repeatable (aka #rule), because only one
>> instance of "S-T-S: max-age=n" is effective in terms of established the
>> cached Known HSTS Host in the UA.
>
> In that case, as this is security related, you may want to talk about
> what recipients are to do when (a) they *do* get multiple instances,

that's already done in -websec-strict-transport-sec-02 in S 7.1.

> and
> (b) when an intermediate folds multiple headers using the comma syntax.

ah, so an intermediate can/might do that to multiple occurrences of any header field in a message ?


>>  > Also in
>>  >
>>  > ; value
>>  > STS-v = STS-d
>>  > / STS-d *( OWS ";" OWS STS-d OWS )
>>  >
>>  > ; STS directive
>>  > STS-d = STS-d-cur / STS-d-ext
>>  >
>>  > ; defined STS directives
>>  > STS-d-cur = maxAge / [ includeSubDomains ]
>>  >
>>  > having includeSubDomains optional is a bit weird.
>>  >
>>  > This means that the empty string would be a valid STS-d-cur, thus an
>>  > empty header field is allowed...
>>
>> Ah, thanks, yes -- i was unsure of how to make includeSubDomains
>> optional while max-age is required, and that hack didn't work.
>>
>> I've now re-worked it as below -- how's that look?
>>
>> thanks again,
>>
>> =JeffH
>>
>>
>> Strict-Transport-Security =
>> "Strict-Transport-Security" ":" OWS STS-v OWS
>>
>> ; STS header field value; must have a max-age:
>>
>> STS-v = max-age
>> / max-age *( OWS ";" OWS STS-d OWS )
>
> ...which makes putting max-age first required.
>
>> ; additional STS directives:
>>
>> STS-d = STS-d-cur / STS-d-ext
>>
>> ; currently defined STS directives,
>> ; delta-seconds is 1*DIGIT and is from [RFC2616]:
>>
>> max-age = "max-age" OWS "=" OWS delta-seconds [ OWS v-ext ]
>>
>> STS-d-cur = includeSubDomains
>>
>> includeSubDomains = "includeSubDomains" [ OWS v-ext ]
>>
>>
>> ; extension points
>> STS-d-ext = name ; STS extension directive
>>
>> v-ext = value ; STS extension value
>>
>> name = token
>>
>> value = OWS / %x21-3A / %x3C-7E ; i.e. optional white space, or
>> ; [ ! .. : ] [ < .. ~ ] any visible chars other than ";"
>>
>> token = 1*tchar
>>
>> tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
>> / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
>> / DIGIT / ALPHA
>> ; visible (printing) characters, except visible
>> ; separators.
>> ; DIGIT, ALPHA, separators are from [RFC2616]
>>
>> ; Basic rules:
>>
>> OWS = *( [ CRLF ] WSP )
>> ; Optional White Space
>>
>> WSP = SP / HTAB
>>
>> CRLF = CR LF
>>
>> ; CR, LF, SP, HTAB are from [RFC2616]
>>
>>
>> ---
>> end
>
> I think it would be simpler not to try to express this in the ABNF.

what do you mean by "this" ?


> Just use the ABNF to state the core syntax (that a parser will need to
> understand), and then put additional requirements about what directives
> must be there in prose (we're doing the same in HTTPbis, but aren't done
> yet... :-).

do you have a particular example in mind?

I'm guessing that the Expect header might be a good example, from -httpbis-p2-semantics-16, yes?

thanks again,

=JeffH


_______________________________________________
websec mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/websec

Reply via email to