After digging around it's starting to look like the answer is a "no" to this 
capability at present (do feel free to correct me if that's wrong, pretty 
please!) so I'm thinking about what it would take to add it.

There are only really two key features needed to support it however:

Add an X-OpenSim-Grid header to llHTTPRequest()

The idea here is to add a new X-OpenSim-Grid header to all llHTTPRequest() 
calls, automatically containing the current grid's login URI, nickname and full 
name, in a format resembling the following:

X-OpenSim-Grid: http://mygrid.com/login; nick_name=my_grid; name="My Grid"

Strictly speaking this isn't necessary, as it is already possible to fetch this 
information via OSSL calls, however including this useful header automatically 
would eliminate the need to enable and use OSSL functions just to send a 
properly grid-agnostic llHTTPRequest().

The question mark here is that the OSSL functions are currently set to a threat 
level of moderate, but I'm not sure why; none of this information should be 
sensitive, as either a login URI is valid or it isn't, i.e- it exists and is 
remotely accessible etc., otherwise it shouldn't matter if the destination 
server knows what the grid is called anymore than it knowing what a region is 
called is a security threat.

So to me this seems harmless, can anyone comment why it might not be?

The only"threat" I can think of is that a standalone grid's login URI would be 
its external IP address, however by sending an HTTP request it is already 
exposing that information anyway so it's not really a security risk.

Enable Querying of IP and Region Name

My thinking is that a new request would be supported on a grid's login URI (if 
possible); whereby, instead of logging in, the sender queries the grid about 
whether a given region name exists with a given IP address or not, with the 
server responding either true or false. There should be no viable risk of 
exploitation here as the call will only return true if the sender already knows 
both a valid IP address and region name; all it can therefore do is confirm 
that <region name> is currently provided by a server at <IP address>.

Adding this to the login URI seems like the simplest option, but it may not be 
the cleanest (is it polluting the login URI to have it handle other things like 
this?), however, with the login URI being the primary point of contact for a 
grid it seems like the most logical way to do it to me. If anyone has any other 
ideas where the query should be performed (and how the necessary info can be 
passed to a web-service) please let comment!

> On 22 Jul 2017, at 11:48, Haravikk <[email protected]> wrote:
> 
> 
>> On 22 Jul 2017, at 08:54, Haravikk <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> (apologies if this ends up posting multiple times, I mistook the 
>> user-activation e-mail as confirmation I could post, instead of following 
>> the link first, then on my second attempt used the wrong damn e-mail address 
>> *facepalms*)
>> 
>> 
>> I'm currently looking at porting a set of web-services from Second Life for 
>> use with Open Simulator based grids, and my current challenge is validating 
>> that an llHTTPRequest() comes from the grid and region that it claims to. 
>> For Second Life requests all I had to do was a reverse DNS lookup on the 
>> sender's IP address, to see if it ends with agni.lindenlab.com 
>> <http://agni.lindenlab.com/> or aditi.lindenlab.com 
>> <http://aditi.lindenlab.com/> depending upon the value for 
>> X-SecondLife-Shard, as this confirmed the server was valid, which means I 
>> can then reasonably trust the other headers.
>> 
>> For Open Simulator grids this obviously isn't possible. So what I'd like to 
>> be able to do is instead require that requests include a header with grid 
>> information, such as the grid's login URI (as obtained by the 
>> osGetGridLoginUri() function), and then somehow perform a call-back to the 
>> grid asking it to confirm if the sender's IP address is currently hosting 
>> the region that it claims the request is from.
>> 
>> 
>> To break it down a bit more:
>> 
>> 1. A script in Haravikk's Region, hosted at 123.123.123.123 sends an 
>> llHTTPRequest() to my web-service with the following key headers:
>> X-SecondLife-Region: Haravikk's Region (1000,1000)
>> X-OpenSim-Region-UUID: 12345678-1234-1234-1234-123456789012
>> X-OpenSim-Grid: http://mygrid.com/login <http://mygrid.com/login>; 
>> nick_name=my_grid; name="My Grid"
>> 2. My web-service doesn't recognise the IP as a host for Haravikk's Region 
>> on my_grid, and so sends a call-back to my_grid asking whether the IP 
>> 123.123.123.123 is currently hosting a region named "Haravikk's Region".
>> 3. If the grid confirms that it is, my web-service can store a note of this 
>> for some reasonable time to avoid repeated requests, and serves up content 
>> as normal, knowing that the request comes from the grid and region that it 
>> claims to (or at least, that the grid was willing to vouch for it).
>> 
>> 
>> What I would like to know is:
>> 1. Is something like this currently possible? The only other way I could 
>> think to do this would be to write some kind of bot to try to connect to the 
>> region through the given grid but that would be incredibly heavy-weight, and 
>> I think would only work if the region was accessible via the hyper-grid 
>> (since I can't have specific login details for every potential grid).
>> 2. If it isn't currently possible, what would it take to make it so? I'm a 
>> programmer myself so wouldn't mind working on adding this if I have to, but 
>> I have no familiarity with the code and am only really starting to get a 
>> grasp for the structure of Open Simulator, so I'm not sure what the best 
>> place to add such an externally facing service might be?
>> 3. Is it worth looking into adding the X-OpenSim-Grid header as a standard 
>> feature either way? It's obviously pretty easy to generate yourself via 
>> script, but seems like it'd be a useful addition for Open Simulator 
>> llHTTPRequest() calls.
>> 
>> 
>> In case it helps, the idea with my web-service is that data will be stored 
>> with an awareness of which grid it belongs to; my purpose in validating the 
>> region with the grid is to make it harder for a request to be spoofed as 
>> coming from a given region/grid combo. While grids like osgrid obviously 
>> allow ad-hoc regions to connect and disconnect, I would at least be able to 
>> confirm that a region did exist, and osgrid was willing to vouch for that 
>> region's IP; if a grid doesn't provide confirmation, then I know that the 
>> request is being spoofed (or sending old details, or the grid doesn't want 
>> to play ball, but either way gives me reason to reject it).
>> 
>> I think this could help a lot for writing web services for use across grids.
>> 
>> Any help is greatly appreciated!
>> - Haravikk
> 
> Okay, so I just found that there's no way to retrieve a region's UUID in a 
> script so you can ignore that part; though I had thought it would be a better 
> way to identify a region (in case a region is renamed).
> 
> Though that does raise the separate question; would there be any harm in 
> making a region's UUID available to scripts and/or sending it as a HTTP 
> header? It just seems like it would be a good way to handle any region that 
> is renamed, because as long as the GUID is kept the same then web-services 
> (and grids) could recognise that it's the same region and treat it 
> accordingly.
> While I realise both name and UUID can be changed by anyone at any time, the 
> potential for abuse is limited so long as a region remains connected, i.e- 
> you could only spoof it when the region is down, and only if the grid 
> performs no additional sanity checks.
> 
> Anyway, just wanted to note that at the most basic this proposal would be to 
> query a grid for IP and region-name, UUID can be kept as a separate issue if 
> necessary, though I think it would be the better way to do it.
> _______________________________________________
> Opensim-dev mailing list
> [email protected]
> http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev

_______________________________________________
Opensim-dev mailing list
[email protected]
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev

Reply via email to