rfc43: add constraint DoS limits#409
Conversation
ab59b9f to
f796a0d
Compare
f796a0d to
9734d88
Compare
|
accidentally closed, re-opened and re-pushed with updated description of "comparison limits", per PR flux-framework/flux-core#5681 |
fd98ae8 to
97ff59c
Compare
grondo
left a comment
There was a problem hiding this comment.
This seems good to me. Just a few wording suggestions inline.
spec_43.rst
Outdated
|
|
||
| { "and": [ { "userid": [ 42 ] }, { "t_submit": [ ">946713600.0" ] } ] } | ||
|
|
||
| In order to limit the potential for a constraint to cause a denial of service (DoS) or long job list service hang, the instance owner can configure a maximum number of *comparisons* a constraint can consume while filtering jobs. Every "check" against a job is considered a comparison. In the last example above, the constraint is looking for all jobs belonging to userid 42 and submitted after January 1, 2000. It will consume at most 2 *comparisons* for each job. The ``userid`` check will always consume 1 comparison and the submission time will consume a comparison if the ``userid`` check passes. |
There was a problem hiding this comment.
Suggestion: reword this description to be in "RFC speak"? E.g. "The instance owner MAY configure...". "Every check SHALL be considered one comparison"...
There was a problem hiding this comment.
Actually I wonder if "The instance owner MAY" could be dropped and we can just say "a comparison limit for constraints MAY be configured"
spec_43.rst
Outdated
|
|
||
| In order to limit the potential for a constraint to cause a denial of service (DoS) or long job list service hang, the instance owner can configure a maximum number of *comparisons* a constraint can consume while filtering jobs. Every "check" against a job is considered a comparison. In the last example above, the constraint is looking for all jobs belonging to userid 42 and submitted after January 1, 2000. It will consume at most 2 *comparisons* for each job. The ``userid`` check will always consume 1 comparison and the submission time will consume a comparison if the ``userid`` check passes. | ||
|
|
||
| After the maximum number of *comparisons* is consumed, an error is returned to the caller. The caller can decrease their search footprint by limiting their search using other inputs in the job list request or making tighter constraints. For example, take following two constraints: |
There was a problem hiding this comment.
Same comment as above, "an error SHALL be returned to the caller. The caller MAY decrease ..."
spec_43.rst
Outdated
|
|
||
| { "and": [ { "userid": [ 42 ] }, { "queue": [ "foobar" ] } ] } | ||
|
|
||
| In these examples the caller wants to filter jobs submitted to the queue foobar and submitted by userid 42. The only difference is the order of the checks. If "foobar" is the most common queue in the system (i.e. the check for queue "foobar" typically succeeds) and ``userid`` is not the most common user in the system (i.e. the check for userid "42" typically fails), the latter constraint will consumes fewer comparisons. |
There was a problem hiding this comment.
s/consumes/consume/
Actually just removing "will" would work too and be more succinct.
Problem: A caller has the ability to specify an unbounded sized constraint object, which could serve as a denial of service (DoS) attack on the job list service. Add description of comparison limits for constraints. By limiting total number of "checks", we can bound constraints and their ability to DoS the job list service.
97ff59c to
4710ac0
Compare
|
@grondo Thanks. Re-pushed with some tweaks per comments above. |
|
Already approved so feel free to set MWP! |
Problem: A caller has the ability to specify an unbounded sized constraint object, which could serve as a denial of service (DoS) attack on the job list service.
Specify hard constraint limits on the size of operator arrays and constraint depth.
initial proposal based on flux-framework/flux-core#5681