Re: [IronPython] Safe execution of python scripts on my .net application

2009-11-03 Thread Shri Borde
I think this happens if the new appdomain cannot load the required assembly. By 
default, the new appdomain should inherit its BaseDirectory property from the 
creating domain and should be able to load Microsoft.Scripting.dll. Is your exe 
and all the dlls in the same folder? If not, can you try to put all assemblies 
in the same folder (or in the GAC) to see if it works? If that works, you can 
then figure out how to configure the new appdomain such that it can load 
Microsoft.Scripting.dll. There may be some setting in AppDomainSetup, or you 
could hook the AssemblyResolve event...

From: users-boun...@lists.ironpython.com 
[mailto:users-boun...@lists.ironpython.com] On Behalf Of Nicolás Buttarelli
Sent: Tuesday, November 03, 2009 12:08 PM
To: Discussion of IronPython
Subject: Re: [IronPython] Safe execution of python scripts on my .net 
application

Hi again, thanks for your clear response.

I was trying to do what you proposed but it is not working. I am receiving an 
exception:

Test method 
CadworX3WCFRestTest.IronPython.SafeScriptExecutionTest.writingAFileTest threw 
exception:  System.Runtime.Serialization.SerializationException: Type is not 
resolved for member 
'Microsoft.Scripting.Hosting.ScriptRuntimeSetup,Microsoft.Scripting, 
Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'..
I tried to find a solution but I couldn't. This is the minimal code that I am 
running to get this exception (I have removed all the security stuff but 
apparently that does not resolve the problem):

AppDomain aSandboxedDomain = AppDomain.CreateDomain(Sandboxed Domain);

ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);
ScriptSource source = engine.CreateScriptSourceFromString(pythonScript);
SriptScope scope = engine.CreateScope();
source.Execute(scope);

The exception is thronged in this line:
ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);


Do you have any idea which could be the problem?

Thanks again,
Nicolas

On Mon, Nov 2, 2009 at 10:25 PM, Dino Viehland 
di...@microsoft.commailto:di...@microsoft.com wrote:
Assuming the app domain is setup properly then there's no way for the Python 
code to elevate permissions (modulo CLR security bugs which are few and far 
between).  This is because IronPython its self is 100% security transparent and 
does not affect any security decisions or assert any form of trust - so it's 
all up to the CLR to limit permissions.  So for example while you can access 
the file object, or import ctypes, or call various other Python APIs which 
would require trust you'll get a security exception from the CLR when you don't 
have permissions to do something.

For more complex scenarios you might also have an object model which you expose 
to the application and inject in via its scope.  Once you've done that you'll 
want to make sure that the object model is also secure.


From: 
users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com 
[mailto:users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com]
 On Behalf Of Nicolás Buttarelli
Sent: Monday, November 02, 2009 1:20 PM
To: Discussion of IronPython
Subject: Re: [IronPython] Safe execution of python scripts on my .net 
application

Thanks for your response.

But what happens with the python code? Does not exist a way to write some 
scripts that can do some damage to my app, the server, the database, etc?

Thanks again,
Nicolas

On Mon, Nov 2, 2009 at 9:41 PM, Dino Viehland 
di...@microsoft.commailto:di...@microsoft.com wrote:
After creating your app domain you can do:

ScriptEngine engine = Python.CreateEngine(someAppDomain);

And then the rest of your code should work as it's written.


From: 
users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com 
[mailto:users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com]
 On Behalf Of Nicolás Buttarelli
Sent: Monday, November 02, 2009 12:39 PM
To: users@lists.ironpython.commailto:users@lists.ironpython.com
Subject: [IronPython] Safe execution of python scripts on my .net application

Sorry, I don't know if my previous message have arrived. So, here it is:


Hello all,

I am starting with python and I would like to add to my web application some 
web services. This services will allow the different clients of my application 
to execute some python scripts.

I would like to know if someone did this before and how can I do this in a 
secure way. I mean, how can I do to restrict the environment where the scripts 
will be executed.

In .net I can do this using the AppDoman and setting the permission set.

AppDomain.CreateDomain( string friendlyName,
Evidence securityInfo,
AppDomainSetup info,
PermissionSet grantSet,
params StrongName[] fullTrustAssemblies);


Is there a way to do the same with my python scripts?

I am running them using this:

ScriptEngine engine = Python.CreateEngine();

Re: [IronPython] Safe execution of python scripts on my .net application

2009-11-03 Thread Nicolás Buttarelli
Thanks Shri, I will try.

In addition, I found this open issue:
http://dlr.codeplex.com/WorkItem/View.aspx?WorkItemId=2816. I think that it
is related.

On Tue, Nov 3, 2009 at 9:29 PM, Shri Borde shri.bo...@microsoft.com wrote:

  I think this happens if the new appdomain cannot load the required
 assembly. By default, the new appdomain should inherit its BaseDirectory
 property from the creating domain and should be able to load
 Microsoft.Scripting.dll. Is your exe and all the dlls in the same folder? If
 not, can you try to put all assemblies in the same folder (or in the GAC) to
 see if it works? If that works, you can then figure out how to configure the
 new appdomain such that it can load Microsoft.Scripting.dll. There may be
 some setting in AppDomainSetup, or you could hook the AssemblyResolve event…



 *From:* users-boun...@lists.ironpython.com [mailto:
 users-boun...@lists.ironpython.com] *On Behalf Of *Nicolás Buttarelli
 *Sent:* Tuesday, November 03, 2009 12:08 PM

 *To:* Discussion of IronPython
 *Subject:* Re: [IronPython] Safe execution of python scripts on my .net
 application



 Hi again, thanks for your clear response.



 I was trying to do what you proposed but it is not working. I am receiving
 an exception:



 *Test method
 CadworX3WCFRestTest.IronPython.SafeScriptExecutionTest.writingAFileTest
 threw exception:  System.Runtime.Serialization.SerializationException: Type
 is not resolved for member
 'Microsoft.Scripting.Hosting.ScriptRuntimeSetup,Microsoft.Scripting,
 Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'..*

 I tried to find a solution but I couldn't. This is the minimal code that I
 am running to get this exception (I have removed all the security stuff but
 apparently that does not resolve the problem):



 *AppDomain aSandboxedDomain = AppDomain.CreateDomain(Sandboxed Domain);*



 *ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);*

 *ScriptSource source = engine.CreateScriptSourceFromString(pythonScript);*

 *SriptScope scope = engine.CreateScope();*

 *source.Execute(scope);*



 The exception is thronged in this line:

 *ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);*





 Do you have any idea which could be the problem?



 Thanks again,

 Nicolas



 On Mon, Nov 2, 2009 at 10:25 PM, Dino Viehland di...@microsoft.com
 wrote:

 Assuming the app domain is setup properly then there’s no way for the
 Python code to elevate permissions (modulo CLR security bugs which are few
 and far between).  This is because IronPython its self is 100% security
 transparent and does not affect any security decisions or assert any form of
 trust – so it’s all up to the CLR to limit permissions.  So for example
 while you can access the file object, or import ctypes, or call various
 other Python APIs which would require trust you’ll get a security exception
 from the CLR when you don’t have permissions to do something.



 For more complex scenarios you might also have an object model which you
 expose to the application and inject in via its scope.  Once you’ve done
 that you’ll want to make sure that the object model is also secure.





 *From:* users-boun...@lists.ironpython.com [mailto:
 users-boun...@lists.ironpython.com] *On Behalf Of *Nicolás Buttarelli
 *Sent:* Monday, November 02, 2009 1:20 PM
 *To:* Discussion of IronPython
 *Subject:* Re: [IronPython] Safe execution of python scripts on my .net
 application



 Thanks for your response.



 But what happens with the python code? Does not exist a way to write some
 scripts that can do some damage to my app, the server, the database, etc?



 Thanks again,

 Nicolas



 On Mon, Nov 2, 2009 at 9:41 PM, Dino Viehland di...@microsoft.com wrote:

 After creating your app domain you can do:



 ScriptEngine engine = Python.CreateEngine(someAppDomain);



 And then the rest of your code should work as it’s written.





 *From:* users-boun...@lists.ironpython.com [mailto:
 users-boun...@lists.ironpython.com] *On Behalf Of *Nicolás Buttarelli
 *Sent:* Monday, November 02, 2009 12:39 PM
 *To:* users@lists.ironpython.com
 *Subject:* [IronPython] Safe execution of python scripts on my .net
 application



 Sorry, I don't know if my previous message have arrived. So, here it is:





 Hello all,



 I am starting with python and I would like to add to my web application
 some web services. This services will allow the different clients of my
 application to execute some python scripts.



 I would like to know if someone did this before and how can I do this in a
 secure way. I mean, how can I do to restrict the environment where the
 scripts will be executed.



 In .net I can do this using the AppDoman and setting the permission set.



 AppDomain.CreateDomain( string friendlyName,
 Evidence securityInfo,
 AppDomainSetup info,
 PermissionSet grantSet,
 params StrongName[] fullTrustAssemblies);

Re: [IronPython] Safe execution of python scripts on my .net application

2009-11-03 Thread Nicolás Buttarelli
I have create a new Test Project and an Unit Test class in order to test
the following code inside:

AppDomain aSandboxedDomain = AppDomain.CreateDomain(Sandboxed Domain);
ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);
ScriptSource source = engine.CreateScriptSourceFromString(pythonScript);
ScriptScope scope = engine.CreateScope();
source.Execute(scope);


I have add the references:

- IronPython
- Microsoft.Scripting
- Microsoft.ScriptingCore

But it still not working and throwing the
same System.Runtime.Serialization.SerializationException: Type is not
resolved for member
'Microsoft.Scripting.Hosting.ScriptRuntimeSetup,Microsoft.Scripting.

Any ideas?


2009/11/3 Nicolás Buttarelli nbuttare...@gmail.com

 Thanks Shri, I will try.

 In addition, I found this open issue:
 http://dlr.codeplex.com/WorkItem/View.aspx?WorkItemId=2816. I think that
 it is related.


 On Tue, Nov 3, 2009 at 9:29 PM, Shri Borde shri.bo...@microsoft.comwrote:

  I think this happens if the new appdomain cannot load the required
 assembly. By default, the new appdomain should inherit its BaseDirectory
 property from the creating domain and should be able to load
 Microsoft.Scripting.dll. Is your exe and all the dlls in the same folder? If
 not, can you try to put all assemblies in the same folder (or in the GAC) to
 see if it works? If that works, you can then figure out how to configure the
 new appdomain such that it can load Microsoft.Scripting.dll. There may be
 some setting in AppDomainSetup, or you could hook the AssemblyResolve event…



 *From:* users-boun...@lists.ironpython.com [mailto:
 users-boun...@lists.ironpython.com] *On Behalf Of *Nicolás Buttarelli
 *Sent:* Tuesday, November 03, 2009 12:08 PM

 *To:* Discussion of IronPython
 *Subject:* Re: [IronPython] Safe execution of python scripts on my .net
 application



 Hi again, thanks for your clear response.



 I was trying to do what you proposed but it is not working. I am receiving
 an exception:



 *Test method
 CadworX3WCFRestTest.IronPython.SafeScriptExecutionTest.writingAFileTest
 threw exception:  System.Runtime.Serialization.SerializationException: Type
 is not resolved for member
 'Microsoft.Scripting.Hosting.ScriptRuntimeSetup,Microsoft.Scripting,
 Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'..*

 I tried to find a solution but I couldn't. This is the minimal code that I
 am running to get this exception (I have removed all the security stuff but
 apparently that does not resolve the problem):



 *AppDomain aSandboxedDomain = AppDomain.CreateDomain(Sandboxed Domain);
 *



 *ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);*

 *ScriptSource source = engine.CreateScriptSourceFromString(pythonScript);
 *

 *SriptScope scope = engine.CreateScope();*

 *source.Execute(scope);*



 The exception is thronged in this line:

 *ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);*





 Do you have any idea which could be the problem?



 Thanks again,

 Nicolas



 On Mon, Nov 2, 2009 at 10:25 PM, Dino Viehland di...@microsoft.com
 wrote:

 Assuming the app domain is setup properly then there’s no way for the
 Python code to elevate permissions (modulo CLR security bugs which are few
 and far between).  This is because IronPython its self is 100% security
 transparent and does not affect any security decisions or assert any form of
 trust – so it’s all up to the CLR to limit permissions.  So for example
 while you can access the file object, or import ctypes, or call various
 other Python APIs which would require trust you’ll get a security exception
 from the CLR when you don’t have permissions to do something.



 For more complex scenarios you might also have an object model which you
 expose to the application and inject in via its scope.  Once you’ve done
 that you’ll want to make sure that the object model is also secure.





 *From:* users-boun...@lists.ironpython.com [mailto:
 users-boun...@lists.ironpython.com] *On Behalf Of *Nicolás Buttarelli
 *Sent:* Monday, November 02, 2009 1:20 PM
 *To:* Discussion of IronPython
 *Subject:* Re: [IronPython] Safe execution of python scripts on my .net
 application



 Thanks for your response.



 But what happens with the python code? Does not exist a way to write some
 scripts that can do some damage to my app, the server, the database, etc?



 Thanks again,

 Nicolas



 On Mon, Nov 2, 2009 at 9:41 PM, Dino Viehland di...@microsoft.com
 wrote:

 After creating your app domain you can do:



 ScriptEngine engine = Python.CreateEngine(someAppDomain);



 And then the rest of your code should work as it’s written.





 *From:* users-boun...@lists.ironpython.com [mailto:
 users-boun...@lists.ironpython.com] *On Behalf Of *Nicolás Buttarelli
 *Sent:* Monday, November 02, 2009 12:39 PM
 *To:* users@lists.ironpython.com
 *Subject:* [IronPython] Safe execution of python scripts on my .net
 application



 Sorry, I don't know if my previous message have arrived. 

Re: [IronPython] Safe execution of python scripts on my .net application

2009-11-03 Thread Nicolás Buttarelli
Hi again, thanks for your clear response.

I was trying to do what you proposed but it is not working. I am receiving
an exception:

*Test method
CadworX3WCFRestTest.IronPython.SafeScriptExecutionTest.writingAFileTest
threw exception:  System.Runtime.Serialization.SerializationException: Type
is not resolved for member
'Microsoft.Scripting.Hosting.ScriptRuntimeSetup,Microsoft.Scripting,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'..
*
I tried to find a solution but I couldn't. This is the minimal code that I
am running to get this exception (I have removed all the security stuff but
apparently that does not resolve the problem):

*AppDomain aSandboxedDomain = AppDomain.CreateDomain(Sandboxed Domain);*
*
*
*ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);*
*ScriptSource source = engine.CreateScriptSourceFromString(pythonScript);*
*SriptScope scope = engine.CreateScope();*
*source.Execute(scope);*

The exception is thronged in this line:
*ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);*


Do you have any idea which could be the problem?

Thanks again,
Nicolas

On Mon, Nov 2, 2009 at 10:25 PM, Dino Viehland di...@microsoft.com wrote:

  Assuming the app domain is setup properly then there’s no way for the
 Python code to elevate permissions (modulo CLR security bugs which are few
 and far between).  This is because IronPython its self is 100% security
 transparent and does not affect any security decisions or assert any form of
 trust – so it’s all up to the CLR to limit permissions.  So for example
 while you can access the file object, or import ctypes, or call various
 other Python APIs which would require trust you’ll get a security exception
 from the CLR when you don’t have permissions to do something.



 For more complex scenarios you might also have an object model which you
 expose to the application and inject in via its scope.  Once you’ve done
 that you’ll want to make sure that the object model is also secure.





 *From:* users-boun...@lists.ironpython.com [mailto:
 users-boun...@lists.ironpython.com] *On Behalf Of *Nicolás Buttarelli
 *Sent:* Monday, November 02, 2009 1:20 PM
 *To:* Discussion of IronPython
 *Subject:* Re: [IronPython] Safe execution of python scripts on my .net
 application



 Thanks for your response.



 But what happens with the python code? Does not exist a way to write some
 scripts that can do some damage to my app, the server, the database, etc?



 Thanks again,

 Nicolas



 On Mon, Nov 2, 2009 at 9:41 PM, Dino Viehland di...@microsoft.com wrote:

 After creating your app domain you can do:



 ScriptEngine engine = Python.CreateEngine(someAppDomain);



 And then the rest of your code should work as it’s written.





 *From:* users-boun...@lists.ironpython.com [mailto:
 users-boun...@lists.ironpython.com] *On Behalf Of *Nicolás Buttarelli
 *Sent:* Monday, November 02, 2009 12:39 PM
 *To:* users@lists.ironpython.com
 *Subject:* [IronPython] Safe execution of python scripts on my .net
 application



 Sorry, I don't know if my previous message have arrived. So, here it is:





 Hello all,



 I am starting with python and I would like to add to my web application
 some web services. This services will allow the different clients of my
 application to execute some python scripts.



 I would like to know if someone did this before and how can I do this in a
 secure way. I mean, how can I do to restrict the environment where the
 scripts will be executed.



 In .net I can do this using the AppDoman and setting the permission set.



 AppDomain.CreateDomain( string friendlyName,
 Evidence securityInfo,
 AppDomainSetup info,
 PermissionSet grantSet,
 params StrongName[] fullTrustAssemblies);





 Is there a way to do the same with my python scripts?



 I am running them using this:



 ScriptEngine engine = Python.CreateEngine();

 ScriptSource source = engine.CreateScriptSourceFromString(scriptAsString);

 ScriptScope scope = engine.CreateScope();

 source.Execute(scope);



 Thanks in advance.

 Nicolas


 ___
 Users mailing list
 Users@lists.ironpython.com
 http://lists.ironpython.com/listinfo.cgi/users-ironpython.com



 ___
 Users mailing list
 Users@lists.ironpython.com
 http://lists.ironpython.com/listinfo.cgi/users-ironpython.com


___
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com


Re: [IronPython] Safe execution of python scripts on my .net application

2009-11-03 Thread Dino Viehland
Test projects are weird and somehow you don't end up inheriting the application 
base.  This seems to work though:

AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
AppDomain aSandboxedDomain = AppDomain.CreateDomain(Sandboxed 
Domain, null, setup);
ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);
ScriptSource source = engine.CreateScriptSourceFromString(2+2);
ScriptScope scope = engine.CreateScope();
Console.WriteLine(source.Execute(scope));

From: users-boun...@lists.ironpython.com 
[mailto:users-boun...@lists.ironpython.com] On Behalf Of Nicolás Buttarelli
Sent: Tuesday, November 03, 2009 1:30 PM
To: Discussion of IronPython
Subject: Re: [IronPython] Safe execution of python scripts on my .net 
application

I have create a new Test Project and an Unit Test class in order to test the 
following code inside:

AppDomain aSandboxedDomain = AppDomain.CreateDomain(Sandboxed Domain);
ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);
ScriptSource source = engine.CreateScriptSourceFromString(pythonScript);
ScriptScope scope = engine.CreateScope();
source.Execute(scope);


I have add the references:

- IronPython
- Microsoft.Scripting
- Microsoft.ScriptingCore

But it still not working and throwing the same 
System.Runtime.Serialization.SerializationException: Type is not resolved for 
member 'Microsoft.Scripting.Hosting.ScriptRuntimeSetup,Microsoft.Scripting.

Any ideas?


2009/11/3 Nicolás Buttarelli 
nbuttare...@gmail.commailto:nbuttare...@gmail.com
Thanks Shri, I will try.

In addition, I found this open issue: 
http://dlr.codeplex.com/WorkItem/View.aspx?WorkItemId=2816. I think that it is 
related.

On Tue, Nov 3, 2009 at 9:29 PM, Shri Borde 
shri.bo...@microsoft.commailto:shri.bo...@microsoft.com wrote:
I think this happens if the new appdomain cannot load the required assembly. By 
default, the new appdomain should inherit its BaseDirectory property from the 
creating domain and should be able to load Microsoft.Scripting.dll. Is your exe 
and all the dlls in the same folder? If not, can you try to put all assemblies 
in the same folder (or in the GAC) to see if it works? If that works, you can 
then figure out how to configure the new appdomain such that it can load 
Microsoft.Scripting.dll. There may be some setting in AppDomainSetup, or you 
could hook the AssemblyResolve event...

From: 
users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com 
[mailto:users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com]
 On Behalf Of Nicolás Buttarelli
Sent: Tuesday, November 03, 2009 12:08 PM

To: Discussion of IronPython
Subject: Re: [IronPython] Safe execution of python scripts on my .net 
application

Hi again, thanks for your clear response.

I was trying to do what you proposed but it is not working. I am receiving an 
exception:

Test method 
CadworX3WCFRestTest.IronPython.SafeScriptExecutionTest.writingAFileTest threw 
exception:  System.Runtime.Serialization.SerializationException: Type is not 
resolved for member 
'Microsoft.Scripting.Hosting.ScriptRuntimeSetup,Microsoft.Scripting, 
Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'..
I tried to find a solution but I couldn't. This is the minimal code that I am 
running to get this exception (I have removed all the security stuff but 
apparently that does not resolve the problem):

AppDomain aSandboxedDomain = AppDomain.CreateDomain(Sandboxed Domain);

ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);
ScriptSource source = engine.CreateScriptSourceFromString(pythonScript);
SriptScope scope = engine.CreateScope();
source.Execute(scope);

The exception is thronged in this line:
ScriptEngine engine = Python.CreateEngine(aSandboxedDomain);


Do you have any idea which could be the problem?

Thanks again,
Nicolas

On Mon, Nov 2, 2009 at 10:25 PM, Dino Viehland 
di...@microsoft.commailto:di...@microsoft.com wrote:
Assuming the app domain is setup properly then there's no way for the Python 
code to elevate permissions (modulo CLR security bugs which are few and far 
between).  This is because IronPython its self is 100% security transparent and 
does not affect any security decisions or assert any form of trust - so it's 
all up to the CLR to limit permissions.  So for example while you can access 
the file object, or import ctypes, or call various other Python APIs which 
would require trust you'll get a security exception from the CLR when you don't 
have permissions to do something.

For more complex scenarios you might also have an object model which you expose 
to the application and inject in via its scope.  Once you've done that you'll 
want to make sure that the object model is also secure.


From: 
users-boun...@lists.ironpython.commailto:users-boun...@lists.ironpython.com