[ 
https://issues.apache.org/jira/browse/OAK-7570?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16528471#comment-16528471
 ] 

Alexander Klimetschek edited comment on OAK-7570 at 6/30/18 1:12 AM:
---------------------------------------------------------------------

[~mduerig]

> SegmentNodeStore is conceptually not a HttpBlobProvider

Every NodeStore is a "BlobProvider" (if that interface would exist, referring 
to the createBlob()/getBlob() methods on NodeStore).

I feel the argument here is touching on an existing design of Oak - nothing new 
this patch changes. If NodeStores should not be blob providers, then the 
BlobStore should be something known to the higher level (e.g. Tree/Root). And 
if there is no separate BlobStore (i.e. a file or S3 DS), but everything is 
handled by the NodeStore itself, the BlobStore instance would be provided by 
the NodeStore impl itself during the setup.

> permission check

I think this opens a door for anonymous users to fill up the S3/Azure datastore 
and create denial-of-service load on e.g. the DS garbage collection. It's also 
easier for an attacker – compared to creating a binary from an inputstream – 
since they don't need to upload a binary to AEM in the first place. See also my 
mail to the private jackrabbit list.

> Nothing seem to prevent users to later attach the binary to any other 
> property.

Yes, but that is actually no problem. There will be another check later (the 
normal one). We only want to prevent a user who cannot write a binary 
_anywhere_ from being able to upload in the first place (e.g. anonymous). There 
is no other way to check that permission than to ask for the path - at least as 
far as we know. Recommendations welcome.

> separating read and write concerns

I argue that intuitiveness for client code is more important here, as well as 
saving on new API interfaces (which we already have more than enough if I 
understand the feedback right ;-)). Because that would be 3 new interfaces, 
HttpBinary, HttpBlob and HttpDataRecord.


was (Author: alexander.klimetschek):
[~mduerig]

> SegmentNodeStore is conceptually not a HttpBlobProvider

Every NodeStore is a "BlobProvider" (if that interface would exist, referring 
to the createBlob()/getBlob() methods on NodeStore).

I feel the argument here is touching on an existing design of Oak - nothing new 
this patch changes. If NodeStores should not be blob providers, then the 
BlobStore should be something known to the higher level (e.g. Tree/Root). And 
if there is no separate BlobStore (i.e. a file or S3 DS), but everything is 
handled by the NodeStore itself, the BlobStore instance would be provided by 
the NodeStore impl itself during the setup.

> permission check

I think this opens a door for anonymous users to fill up the S3/Azure datastore 
and create denial-of-service load on e.g. the DS garbage collection. It's also 
easier for an attacker since they don't need to upload a binary to AEM in the 
first place. See also my mail to the private jackrabbit list.

> Nothing seem to prevent users to later attach the binary to any other 
> property.

Yes, but that is actually no problem. There will be another check later (the 
normal one). We only want to prevent a user who cannot write a binary 
_anywhere_ from being able to upload in the first place (e.g. anonymous). There 
is no other way to check that permission than to ask for the path - at least as 
far as we know. Recommendations welcome.

> separating read and write concerns

I argue that intuitiveness for client code is more important here, as well as 
saving on new API interfaces (which we already have more than enough if I 
understand the feedback right ;-)). Because that would be 3 new interfaces, 
HttpBinary, HttpBlob and HttpDataRecord.

> [DirectBinaryAccess][DISCUSS] Client access via DataStoreBlobStore directly
> ---------------------------------------------------------------------------
>
>                 Key: OAK-7570
>                 URL: https://issues.apache.org/jira/browse/OAK-7570
>             Project: Jackrabbit Oak
>          Issue Type: Technical task
>          Components: blob-plugins
>            Reporter: Matt Ryan
>            Assignee: Matt Ryan
>            Priority: Major
>
> Open discussion related to OAK-7569:
> The [original pull request|https://github.com/apache/jackrabbit-oak/pull/88] 
> proposes changes to oak-api, oak-segment-tar, oak-store-document, oak-core, 
> and oak-jcr as well as oak-blob-plugins, oak-blob-cloud, and oak-blob-azure.  
> Would it be possible / better to keep the changes local to the oak-blob-* 
> bundles and avoid making changes throughout the stack?



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to