On Tue, 2013-07-23 at 23:47 +0100, Henry Nash wrote:
> ...the problem is that if the object does not exists we might not be able 
> tell whether the use is authorized or not (since authorization might depend 
> on attributes of the object itself)....so how do we know wether to lie or not?

If the error you return is always 'Not Found', why do you care ?

Simo.

> Henry
> On 23 Jul 2013, at 21:23, David Chadwick wrote:
> 
> > 
> > 
> > On 23/07/2013 19:02, Henry Nash wrote:
> >> One thing we could do is:
> >> 
> >> - Return Forbidden or NotFound if we can determine the correct answer
> >> - When we can't (i.e. the object doesn't exist), then return NotFound
> >> unless a new config value 'policy_harden' (?) is set to true (default
> >> false) in which case we translate NotFound into Forbidden.
> > 
> > I am not sure that this achieves your objective of no data leakage through 
> > error codes, does it?
> > 
> > Its not a question of determining the correct answer or not, its a question 
> > of whether the user is authorised to see the correct answer or not
> > 
> > regards
> > 
> > David
> >> 
> >> Henry
> >> On 23 Jul 2013, at 18:31, Adam Young wrote:
> >> 
> >>> On 07/23/2013 12:54 PM, David Chadwick wrote:
> >>>> When writing a previous ISO standard the approach we took was as follows
> >>>> 
> >>>> Lie to people who are not authorised.
> >>> 
> >>> Is that your verbage?  I am going to reuse that quote, and I would
> >>> like to get the attribution correct.
> >>> 
> >>>> 
> >>>> So applying this approach to your situation, you could reply Not
> >>>> Found to people who are authorised to see the object if it had
> >>>> existed but does not, and Not Found to those not authorised to see
> >>>> it, regardless of whether it exists or not. In this case, only those
> >>>> who are authorised to see the object will get it if it exists. Those
> >>>> not authorised cannot tell the difference between objects that dont
> >>>> exist and those that do exist
> >>> 
> >>> So, to try and apply this to a semi-real example:  There are two types
> >>> of URLs.  Ones that are like this:
> >>> 
> >>> users/55FEEDBABECAFE
> >>> 
> >>> and ones like this:
> >>> 
> >>> domain/66DEADBEEF0000/users/55FEEDBABECAFE
> >>> 
> >>> 
> >>> In the first case, you are selecting against a global collection, and
> >>> in the second, against a scoped collection.
> >>> 
> >>> For unscoped, you have to treat all users as equal, and thus a 404
> >>> probably makes sense.
> >>> 
> >>> For a scoped collection we could return a 404 or a 403 Forbidden
> >>> <https://en.wikipedia.org/wiki/HTTP_403> based on the users
> >>> credentials:  all resources under domain/66DEADBEEF0000  would show up
> >>> as 403s regardless of existantce or not if the user had no roles in
> >>> the domain 66DEADBEEF0000.  A user that would be allowed access to
> >>> resources in 66DEADBEEF0000  would get a 403 only for an object that
> >>> existed but that they had no permission to read, and 404 for a
> >>> resource that doesn't exist.
> >>> 
> >>> 
> >>> 
> >>> 
> >>>> 
> >>>> regards
> >>>> 
> >>>> David
> >>>> 
> >>>> 
> >>>> On 23/07/2013 16:40, Henry Nash wrote:
> >>>>> Hi
> >>>>> 
> >>>>> As part of bp
> >>>>> https://blueprints.launchpad.net/keystone/+spec/policy-on-api-target
> >>>>> I have uploaded some example WIP code showing a proposed approach
> >>>>> for just a few API calls (one easy, one more complex). I'd
> >>>>> appreciate early feedback on this before I take it any further.
> >>>>> 
> >>>>> https://review.openstack.org/#/c/38308/
> >>>>> 
> >>>>> A couple of points:
> >>>>> 
> >>>>> - One question is on how to handle errors when you are going to get
> >>>>> a target object before doing you policy check.  What do you do if
> >>>>> the object does not exist?  If you return NotFound, then someone,
> >>>>> who was not authorized  could troll for the existence of entities by
> >>>>> seeing whether they got NotFound or Forbidden. If however, you
> >>>>> return Forbidden, then users who are authorized to, say, manage
> >>>>> users in a domain would aways get Forbidden for objects that didn't
> >>>>> exist (since we can know where the non-existant object was!).  So
> >>>>> this would modify the expected return codes.
> >>>>> 
> >>>>> - I really think we need some good documentation on how to bud
> >>>>> keystone policy files.  I'm happy to take a first cut as such a
> >>>>> thing - what do you think the right place is for such documentation
> >>>>> 
> >>>>> _______________________________________________
> >>>>> OpenStack-dev mailing list
> >>>>> OpenStack-dev@lists.openstack.org
> >>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> >>>>> 
> >>>> 
> >>>> _______________________________________________
> >>>> OpenStack-dev mailing list
> >>>> OpenStack-dev@lists.openstack.org
> >>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> >>> 
> >>> _______________________________________________
> >>> OpenStack-dev mailing list
> >>> OpenStack-dev@lists.openstack.org
> >>> <mailto:OpenStack-dev@lists.openstack.org>
> >>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> >> 
> >> 
> >> 
> >> _______________________________________________
> >> OpenStack-dev mailing list
> >> OpenStack-dev@lists.openstack.org
> >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> >> 
> > 
> 
> 
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


-- 
Simo Sorce * Red Hat, Inc * New York


_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to