天道酬勤,学无止境

在 ASP.NET 中以中等信任存储临时用户文件(Storing temporary user files in ASP.NET in medium trust)

问题

我有一个场景,我的 ASP.NET Web 应用程序的用户提交由文本信息和图像组成的推荐。 提交过程有以下几个步骤:

  • 首先,用户输入内容并选择图像的路径
  • 当他点击预览时,信息再次显示,以便他可以确认
  • 一旦确认信息将保存在数据库中

这样做的问题是我不想在用户实际确认之前将上传的图像存储在数据库中。 相反,我将它们存储为临时文件,并在最终确认后才将它们放入数据库中。

由于我还希望我的应用程序以中等信任度运行,因此我只对应用程序目录具有写权限,而没有其他任何地方。 我什至想将 ASPNET / NETWORK SERVICE 用户的写入权限限制到 ~/App_Data 文件夹。 我的方案的问题是,一旦在此文件夹中创建了一个临时文件,应用程序池就会被回收,我不希望在每次提交推荐时都这样做。

您如何建议我保留这些临时文件? 如果我更新文件,池不会重新启动 - 仅在创建或重命名时。 但我不认为我可以为所有用户将整个图像存储在一个文件中。 你怎么看?

更新:我应该注意到我正在使用第三方控件进行上传。 它使我可以在上传后以编程方式访问文件内容的二进制流,但是在第二次回发后我无法保留它(第一步和回发实际上是上传)。

回答1

我会推荐隔离存储。 它是一种虚拟文件夹。

以下是 CodeProject 示例的摘录:

IsolatedStorageFileStream stream = 
  new IsolatedStorageFileStream(ISOLATED_FILE_NAME, 
  FileMode.Create, isoStore);

StreamWriter writer = new StreamWriter( stream );
writer.WriteLine( "This is my first line in the isolated storage file." );
writer.WriteLine( "This is second line." );
writer.Close();

更新:要清理您的文件,只需执行以下操作:

string fileName = "isolatestorage.txt";

IsolatedStorageFile storage = IsolatedStorageFile.GetStore(
    IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

string[] files = storage.GetFileNames(fileName);
foreach(string file in files) {
    if(file == fileName) {
        storage.DeleteFile(file);
        break;
    }
}
回答2

众所周知,Microsoft 提供的默认 web_mediumtrust.config 文件是不切实际的。

这是默认 web_mediumtrust.config 文件中的一个片段。 默认情况下,您不能使用 System.IO 来发现或写入临时文件夹。

                        <IPermission
                                class="FileIOPermission"
                                version="1"
                                Read="$AppDir$"
                                Write="$AppDir$"
                                Append="$AppDir$"
                                PathDiscovery="$AppDir$"
                        />

虽然我没有像@Seb 提到的那样使用隔离存储进行实验,但默认配置文件似乎是允许的。

回答3

在 ASP.NET 方案中,您仍然可以使用普通的 Path.GetTempFilename() 方法来获取临时文件。

它应该为您提供一个可由 NETWORK_SERVICE 写入的临时文件路径,但也位于实际 Windows 的临时文件夹之一中,而不是您的应用程序文件夹中。

如果您的主机正确配置了他的服务器,那应该可以正常工作。

回答4

这是对评论我的问题的 Leppie 的回复(以避免字符限制)

来自:http://blogs.msdn.com/johan/archive/2007/05/16/common-reasons-why-your-application-pool-may-unexpectedly-recycle.aspx

...有时您的应用程序池会莫名其妙地无缘无故地回收。 这通常是配置问题或由于您在应用程序目录中执行文件系统操作的事实。

你确定它不应该回收吗?

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 用户对 Temporary ASP.NET Files 文件夹的写入权限是否会造成任何安全问题?(Does user write permissions to the Temporary ASP.NET Files folder pose any security problems?)
    问题 由于对 Temporary ASP.NET Files 文件夹的权限不足,我遇到程序集绑定失败。 该应用程序使用 (web.config) Forms 身份验证和 Impersonate = True 和 IIS Windows 集成身份验证。 根据 ASP.NET 标识矩阵,这意味着 WindowsIdentity 解析为域\用户名,并且根据 ASP.NET 所需的访问控制列表 (ACL),WindowsIdentity 需要对 ASP.NET 临时文件文件夹的读/写权限。 使用 Fusion 日志查看器,我可以确认程序集绑定失败是由于 Domain\UserName(属于安全中的“Users”组)只有对此文件夹的读取权限,但没有写入权限。 问题是: 为 ASP.Net Files 临时文件夹分配写权限是否有任何安全隐患? 这样的服务器配置更改是否常用? 如果不是,为什么 WindowsIdentity 会为 web.config 设置的这种组合解析为 Domain\UserName - 或者在这种情况下不应该使用这种组合? 注意:只有当非管理员用户是第一个点击页面时才会出现问题。 如果由于管理员用户点击页面,程序集已经编译并存储在临时 ASP.NET 文件中,则后续用户没有问题。 我不希望将程序集放在 GAC 中。 回答1 ASP.NET 需要对 Temporary
  • ASP.Net MVC Web应用程序中的log4net引发安全异常(log4net throwing Security Exception in ASP.Net MVC web application)
    问题 我已经编写了3个ASP.net MVC Web应用程序,并且所有这些程序都通过ISP部署在共享的托管服务器上。 所有这三个应用程序的配置和设置都非常相似。 第一个应用程序被部署到与第二个和第三个应用程序不同的服务器上。 第一个应用程序没有给我任何错误。 第二个和第三个应用程序有些吐出以下SecurityException :随机: 关联 例外文字: Security Exception Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file. Exception Details: System.Security.SecurityException: Request for the permission of type 'System.Configuration.ConfigurationPermission, System
  • 错误CS0433“ A.dll和B.dll中都已经存在类型'X'”从何而来?(Where does error CS0433 “Type 'X' already exists in both A.dll and B.dll ” come from?)
    问题 当我使用内部Web服务器(而非IIS)从Visual Studio 2008 SP1运行Webapp时,收到上述错误。 完整错误(源文件Default.aspx.cs ): 编译器错误消息:CS0433:类型'WebApplication3.Site1'在'c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ App_Web_site1.master.cdcab7d2中均存在。 muczzy9v.dll'和'c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ assembly \ dl3 \ 44c3a3cf \ 80dd34ed_6968ca01 \ WebApplication3.DLL' 前面的完整警告: 警告:CS0436:在'c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0
  • ASP.NET MVC - 信用卡数据的安全临时存储(ASP.NET MVC - Secure Temporary Storage of Credit Card Data)
    问题 我有一个购物车的结账流程,该购物车当前正在会话中存储信用卡数据,以便在用户完成购买后进行检索。 购买过程设置为用户输入信用卡,查看确认页面,然后完成订单。 确认和完成操作是仅有的两个需要访问信用卡数据的操作,为了安全,所有其他操作都应该丢弃它。 没有在基本控制器中进行反射以检查用户正在调用的当前操作,我想不出一种优雅的方法来丢弃不允许的请求上的数据。 此外,如果用户在输入数据后未能发出另一个请求,它将在会话中停留,直到他们返回网站 - 无论何时发生。 我得到的一个建议是将数据加密到一个隐藏字段中,并依靠 SSL 票证来防止缓存标记。 这似乎是一种相当安全的方法,但我不太喜欢将信用卡数据放在用户可访问的位置是否加密的想法。 由于客户不想保存信用卡数据,因此无法存储在数据库中。 在多个页面请求中临时保存信用卡信息等敏感数据的理想方法是什么? 也许有人可以告诉我这是否是一种充分的方法。 我已将存储在会话中的购物车设置为在每次更新对象时生成唯一的 Guid,并且该 Guid 用作加密和解密信用卡数据的密钥,我正在使用 Rijndael 算法将其序列化。 加密的卡数据然后在隐藏字段中传递给用户,并在单击完成后反序列化。 最终结果是一个很像这样的字符串: VREZ%2bWRPsfxhNuOMVUBnWpE%2f0AaX4hPgppO4hHpCvvwt%2fMQu0hxqA%2fCJO
  • 我可以使用反射在ASP.NET中而不是asp临时文件夹中找到bin / [Configuration]文件夹(Can I use reflection to find the bin/[Configuration] folder in ASP.NET instead of the asp temporary folder)
    问题 我有一个ASP.NET网站,我想找到/ bin / [Configuration]文件夹以使用外部工具(一个exe文件)。 当我使用反射获取调用程序集的位置时,它返回类似于以下内容的内容: C:\Windows\Microsoft.NET\Framework\\...\Temporary ASP.NET Files\a1388a5e\\...\my.dll 由于每个dll在临时ASP.NET文件下都有其自己的目录,因此这对我来说失败了。 如何获取dll和.exe所在的已编译二进制文件夹(即bin /)而不是asp.net的临时缓存的位置? 笔记 此代码位于一个支持库中,可以从ASP.NET网站或其他控制台/ Windows应用程序调用该库。 回答1 您可以尝试(摘自如何:获取应用程序目录): Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase); 我设置了一个快速测试: 在VS开发服务器(已编译的站点,/ bin目录等)下运行的Web应用程序项目。 WA引用的类库项目。 在Web应用程序中,我创建了一个页面,该页面从库项目中调用了以下方法: using System.IO; using System.Reflection; namespace TestHelpers { public
  • WinHttp:如何使用临时证书存储?(WinHttp: How to use a temporary certificate store?)
    问题 我有一个 C++ 应用程序,它与我们的一台服务器建立 HTTPS 连接。 在我的理想世界中,我希望发生以下情况: 应用程序启动应用程序让 Windows 信任服务器的根 CA(请不要使用 GUI,只需系统调用) 应用程序与服务器对话,执行其工作等。 应用程序让 Windows 忘记服务器的根 CA 完毕 我不希望这个根 CA 一定被其他应用程序信任。 因此我不想在系统范围内安装证书。 如果用户不需要管理员权限,我也喜欢它。 我最初的计划是创建一个内存 (CERT_STORE_PROV_MEMORY) 存储,将我的证书添加到其中,然后使用 CertAddStoreToCollection 将该内存存储添加到系统存储。 虽然所有 CryptoAPI 函数调用都成功,但 WinHttp 并不喜欢它。 这是我正在做的事情的骨架 - 也许有人知道一个技巧? 或者也许这首先是错误的? hMemStore = CertOpenStore(CERT_STORE_PROV_MEMORY, ...); pCert = CertCreateCertificateContext(..., pCertBytes, ...); CertAddCertificateContextToStore(hMemStore, pCert, ...); hRootStore = CertOpenSystemStore
  • 获取ASP.NET临时文件夹路径(Get ASP.NET temporary folder path)
    问题 从我的C#代码(不是从IIS / ASP.NET内部运行)中,我需要向ASP.NET临时文件夹添加用户帐户权限。 (将我的网站添加到IIS时,这是必需的。)我的本地系统上的文件夹是: C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ ASP.NET临时文件 我不想将此路径硬编码到我的代码中,所以我想知道是否可以从.NET Framework本身检索它? 回答1 唔。 我不知道会这么复杂。 由于缺少更好的答案,我想出了这样的东西: using System.Runtime.InteropServices; string net_base = Path.GetFullPath(Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), @"..\..")); string strTemp32 = string.Concat(net_base, @"\Framework\", RuntimeEnvironment.GetSystemVersion(), @"\Temporary ASP.NET Files"); string strTemp64 = string.Concat(net_base, @"\Framework64\", RuntimeEnvironment
  • 无法加载文件或程序集“ Antlr3.Runtime(1)”或其依赖项之一(Could not load file or assembly 'Antlr3.Runtime (1)' or one of its dependencies)
    问题 我在尝试运行我的MVC4项目时遇到此错误,直到上次在其他计算机上它都可以正常工作,但是当我尝试从另一台计算机上运行它时,出现此错误: 无法加载文件或程序集“ Antlr3.Runtime(1)”或其依赖项之一。 找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040) 在这里阅读完有关内容后,我尝试执行以下操作: 安装包Antlr3.Runtime -Pre 但这没有帮助,有什么想法吗? 回答1 在尝试免费的Nlog日志记录平台时,我遇到了相同的问题。 这对我有帮助: 在文件资源管理器中输入%TEMP%并删除所有临时文件。 之后,在Visual Studio中启动我的MVC5项目时,我没有收到错误消息。 回答2 通过执行以下操作之一,尝试删除ASP.Net的临时文件: 在文件资源管理器中输入%TEMP%并删除所有临时文件。 转到文件夹“ C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files”并删除所有文件。 回答3 不要忘了还要清除Framework64 ASP.NET临时文件。 那对我有用。 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files C
  • Visual Studio调试/加载非常慢(Visual Studio debugging/loading very slow)
    问题 我机智。 Visual Studio通常非常痛苦地调试或只是简单地加载(“不调试就启动”)我的ASP.NET MVC站点。 并非总是如此:一开始,项目会很好且快速地加载,但是一旦加载速度很慢,那之后它们总是会加载得很慢。 我可能要等待1-2分钟或更长时间。 我的设置: 目前,我正在使用Visual Studio 2012 Express,但在Visual Studio 2010 Express中也遇到了相同的问题。 我的解决方案存储在网络驱动器上。 具体来说,如果重要的话,它是“我的文档”重定向到网络驱动器。 (不应该。在这种设置下,有时我的网站加载速度非常快。) 我通常在Internet Explorer 9中加载,但是在Firefox中也会发生相同的问题。 这可能会在我从事的任何ASP.NET MVC项目中发生,并且似乎与拥有DisplayTemplates有关,而我的所有ASP.NET MVC项目都这样做。 如果这很重要,那就是C#和Razor。 症状: 系统将加载我的符号数百次。 基本上,下面是,但是至少有300这样的行,对于同一CSHTML,每行都具有稍微不同的DLL文件: 'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319
  • Visual Studio 2013缓存旧版本的.js文件(Visual Studio 2013 caching older version of .js file)
    问题 我正在Visual Studio 2013 Ultimate中进行小型Web api项目。 Windows2013。InternetExplorer9。当我使用内部Web服务器从VS运行(调试)时(现在我想是IIS Express),我发现我正在对JavaScript页面进行(并保存)更改。忽略了。 在javascript中放置断点将显示旧代码,而无需进行更改。 CTRL + F5不会强制应用程序使用当前更新的页面。 签入页面,然后将其签出通常是可行的。 有什么设置或技巧可以帮助我吗? 回答1 清除缓存历史记录似乎有点多余,我不想一直这样做。 以下解决方案在Internet Explorer中起作用:首先启用脚本调试: 工具菜单->选择Internet选项在高级选项卡上,取消选中“禁用脚本调试(Internet Explorer)” 然后确保获得最新页面: 从工具菜单中选择Internet选项。 在“常规”选项卡上的“浏览历史记录”下,单击“设置”。 在“检查存储的页面的较新版本”下,确保选中“每次我访问该网页”。 单击确定按钮。 回答2 如果有人遇到此问题,并且ctrl + F5,清除浏览器的缓存,重新启动调试,更改浏览器,更改web.config和重建项目无济于事,那么最后一件有效的事情(至少对我而言):重新启动Visual Studio 。 此外,更改本地IIS
  • 生成临时 URL 以重置密码(Generate temporary URL to reset password)
    问题 我希望在我的网站上实现忘记密码功能。 我喜欢将包含临时一次性使用 URL 的电子邮件发送给用户的选项,该 URL 在一段时间后过期。 我查看了以下页面以获得这些想法,但我不确定如何使用 ASP.NET 和 C# 实现它。 正如一位用户所指出的那样,如果我可以在不将此信息存储在数据库中的情况下实现这一点,那将是理想的。 请指教。 通过电子邮件发送临时密码重置密码 谢谢。 回答1 根据您的需要,您可以加密信息,格式类似于以下格式 (UserId)-(ExpireDate) 加密数据,建立链接,然后解密数据并从那里采取行动...... 粗制滥造,但很可能可用,并且不需要使用数据库 回答2 可能最简单的方法是修改您的用户表以添加 2 个额外的列,或者如果您不想修改现有表,您可以添加一个名为“UserPasswordReset”或类似的新依赖表。 列是这样的: PasswordResetToken UNIQUEIDENTIFIER, PasswordResetExpiration DATETIME 如果您使用附加表路由,您还可以添加 UserID 列,使其成为主键和外键引用回您的用户表。 还建议使用 UNIQUE 约束。 然后,您只需在 asp.net 应用程序中使用 Guid 作为令牌。 流程可能是这样的: 用户请求为其帐户重置密码您可以通过将
  • 上传,处理,存储和交付用户提供的文件和图像(uploading, processing, storing and delivering user-provided files and images)
    问题 在Web开发人员生命中的晚期或早期,您将不得不处理用户上传的文件和图像。 常见问题: 如何上传? 现代的Web浏览器和技术允许通过多种方式将用户提供的文件上传到我的服务器。 什么是最佳做法,我必须考虑什么? 我该如何处理? 上传完成后,我需要了解什么安全性以及文件的进一步处理 如何储存和运送? 是否有关于如何存储上载文件的最佳实践? 免责声明:我已经在以下回答中投入了将近30分钟的时间,删除了最初的问题,因此我决定询问用户在处理用户提供的文件时可能会遇到的一般性问题。 看到我的回答,您可以自由贡献并添加您的想法和经验 回答1 每个步骤都没有“最佳”方法,但是各种技术和库中的一整套既定方法和最佳实践可以帮助您实现用户友好的上载,安全性和速度。 对于另一个不幸被删除的问题,我编写了这个小指南。 用户提供的文件或图像在其生命周期中经历了几个阶段: 上传本身有效期存储处理(例如类型转换,大小调整,缩略图生成等) 储存前端侧交付 这将解决所有步骤,并尽可能提供示例 1.上传 现代网络浏览器提供了几种上传文件的方法。 最简单的方法是使用简单的<input type="file" name="userFile" />标记创建表单。 提交表单后,该文件将使用POST发送,并且可以使用PHP中的$ _FILES超全局变量进行访问 1.1。 HTML中的简单表格 <form action=
  • 什么是“ ASP.NET临时文件”文件夹?(What is the “Temporary ASP.NET Files” folder for?)
    问题 我在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files发现了此文件夹,并有几个问题。 ASP.NET将此文件夹用于什么用途,以及在此存储什么类型的文件? 文件如何存储在这里,以及何时更新? 该文件夹需要任何形式的维护吗? 回答1 这些就是所谓的卷影副本文件夹。 简单地说...。我真的是这样: 当ASP.NET首次运行您的应用程序时,它将复制在/ bin文件夹中找到的所有程序集,复制所有源代码文件(例如在App_Code文件夹中找到),并将aspx,ascx文件解析为c#源文件。 然后,ASP.NET将所有这些代码生成/编译到可运行的应用程序中。 这样做的优点之一是,它防止了.NET程序集DLL的#(在/ bin文件夹中)被ASP.NET辅助进程锁定并因此不可更新的可能性。 ASP.NET监视您网站中的文件更改,并在必要时将重新开始整个过程​​。 从理论上讲,该文件夹不需要任何维护,但会不时地进行,并且很少会需要删除内容。 就是说,我在一家托管公司工作,每个共享服务器最多可以运行1200个站点,而且多年来我都不必在250台左右的计算机上触摸此文件夹。 MSDN文章“了解ASP.NET动态编译”中对此进行了概述。 回答2 CLR在运行时进行编译时会使用它。 这是指向MSDN的链接,进一步说明。
  • 无法加载文件或程序集临时ASP.NET文件(Could not load file or assembly Temporary ASP.NET Files)
    问题 我正在用C#开发aps.net网站,并且正在使用框架4。创建新的网站项目后,我尝试运行该项目。 但我收到以下错误 Could not load file or assembly 'file:///C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\myfirst\159977c5\b9e740fc\App_global.asax.yfqtni9g.dll' or one of its dependencies. The system cannot find the file specified. 我已经浏览了以下链接[并且都谈到了对该文件夹的访问],但是它对我没有帮助:( Could not load file or assembly 'file:///C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\ asp.net vs2010 ASP.NET corrupt assembly "Could not load file or assembly App_Web_*" http://web.archive.org/web/20101023213019/http://www.yetanotherdeveloper.com/post/2008/08
  • 来自HRESULT的异常:0x80070057(E_INVALIDARG)(Exception from HRESULT: 0x80070057 (E_INVALIDARG))
    问题 我有一个WPF应用程序。 在构建它时,出现以下错误: 无法加载文件或程序集或其依赖项之一。 参数错误。 (来自HRESULT的异常:0x80070057(E_INVALIDARG)) 应用程序正在尝试从虚拟驱动器(作为调试文件夹)加载程序集 例如:[替代r:c:[我的装箱位] 早些时候,我将c:\ bin挂载为网络驱动器,但由于错误而出现错误。 该程序集可能已从Web下载。 如果程序集已从Web下载,则Windows将其标记为Web文件,即使它位于本地计算机上也是如此。 这可能会阻止它在您的项目中使用。 您可以通过更改文件属性来更改此名称。 仅取消阻止您信任的程序集。 有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=179545。 编辑:顺便说一句,我无法在属性窗口中找到“取消阻止”按钮。 回答1 在以下位置清除项目的临时框架文件: 对于Windows 7,路径为: C:\Users\[username]\AppData\Local\Temp\Temporary ASP.NET Files\ 对于路径中带有“框架”的64位系统,完整路径为: C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\ http://www
  • 创建临时文件并自动删除(Create temporary file and auto removed)
    问题 我正在写一个防窃取下载脚本,我的计划是创建一个临时文件,以会话ID命名,然后会话过期后,该文件将被自动删除。 是否可以 ? 你能给我一些如何在 PHP 中做到这一点的提示吗? 非常感谢您的回复 回答1 所以我们有一个或多个文件可供下载。 为每个下载请求创建一个临时文件不是一个好主意。 为每个文件创建一个symlink()是一个更好的主意。 这将节省大量磁盘空间并降低服务器负载。 在用户会话之后命名符号链接是一个不错的主意。 一个更好的主意是生成一个随机的符号链接名称并与会话相关联,因此脚本可以处理每个会话的多次下载。 您可以使用session_set_save_handler() (链接)并注册一个自定义read函数,该函数检查过期会话并在会话过期时删除符号链接。 回答2 PHP 有一个名为 tmpfile 的函数。 它创建一个临时文件并返回一个资源。 该资源可以像任何其他资源一样使用。 例如手册中的示例: <?php $temp = tmpfile(); fwrite($temp, "writing to tempfile"); fseek($temp, 0); echo fread($temp, 1024); fclose($temp); // this removes the file ?> 该文件在关闭时(使用 fclose())或脚本结束时自动删除。
  • 哪个IOC容器以中等信任度运行(Which IOC Container runs in medium trust)
    问题 嗨,我正在尝试使用Mosso运行一个以Castle Windsor作为我的IOC的网站,但是出现以下错误。 [SecurityException: That assembly does not allow partially trusted callers.] GoldMine.WindsorControllerFactory..ctor() in WindsorControllerFactory.cs:33 GoldMine.MvcApplication.Application_Start() in Global.asax.cs:70 我的问题是 温莎城堡是否在中等信任下运行? 我可以下载DLL而不用nant重新编译吗? (因为我没有设置,也不知道南特) 还是我可以使用另一个IOC来下载并在Medium Trust中工作? 谢谢 回答1 温莎的立场似乎在这里得到了论证/讨论。 林富似乎 从2.5版开始,StructureMap似乎已经到了。 SM 2.6没有Reflection.Emit 好的Bingoogleable关键字是AllowPartiallyTrustedCallersAttribute 回答2 无耻的插件:Simple Injector在Medium Trust中运行! 回答3 存储库已移动,您现在可以在此处找到所有新链接http://www
  • ASP.Net将用户数据存储在身份验证Cookie中(ASP.Net Store User Data in Auth Cookie)
    问题 我想在身份验证Cookie的用户数据部分中存储一些数据,例如用户昵称和用户ID(表主键)。 我这样做的原因是在关闭浏览器时保留此数据,而无需用户重新登录。 编辑:哎呀! 意识到我不会很好地解释自己。 我不尝试根据用户的cookie重新对其进行身份验证。 用户已经通过ASP.Net的成员资格系统进行了身份验证-这部分很好。 我的问题是,例如,如果要显示用户的昵称,则必须启动另一个SQL查询,然后将其存储在会话中。 我认为将这些信息存储在UserData部分的auth cookie(同样是ASP.Net已经创建的cookie)中是有意义的,该cookie似乎是为此目的创建的。 我不想使用配置文件,因为我有自己的带有配置文件数据的用户表,并且我需要轻量级的解决方案。 在auth cookie的用户数据部分中编码此数据的一种好方法是什么? 我当时在考虑序列化,但这可能会太过分了。 我会以错误的方式处理吗? 回答1 我已经在此处编写了有关如何执行此操作的深入教程: http://www.danharman.net/2011/07/07/storing-custom-data-in-forms-authentication-tickets/ 这将保持加密和身份验证,并使用json将类序列化为UserData字段。 编辑: 该博客不再存在,可以在此处的网络档案中找到档案。 博客摘要:
  • 在跨平台Java中将文件存储在用户目录中(Storing a file in the user's directory in cross-platform Java)
    问题 我有一个在 Mac 和 Windows 上运行的 Java 应用程序,直接从 CD/DVD 上运行,无需安装。 现在,我需要在本地文件系统的某处存储一个包含每个用户数据(想想收藏夹等)的文件,以便可以写入。 那么,您认为该文件的最佳位置在哪里? 我在想这样的事情: <USER_DOCUMENTS_AND_SETTINGS>/application data/myapp/favourites.db for windows <USER_HOME_DIR>/.myapp/favourites.db for mac/nix 想法? 有谁知道在 Java 中确定这些路径的最佳方法吗? 回答1 System.getProperty("user.home") 回答2 除了user.home ,以下内容对于更多的临时文件存储很有用: System.getProperty("java.io.tmpdir") 回答3 使用 Java Preferences API,专门设计用于以我们都喜欢的独立于平台的方式存储用户首选项值。 Java 将负责保存它们并根据操作系统从文件或其他后备存储中检索。 这些教程可以让你继续 回答4 您可以考虑将数据存储在 Windows 下的 Roaming 目录中。
  • Oracle数据库安全管理
    Oracle数据库安全管理目录+ 1.数据库安全控制策略概述+ 2.用户管理+ 3.资源限制与口令管理+ 4.权限管理+ 5.角色管理+ 6.审计1.数据库安全控制策略概述安全性是评估一个数据库的重要指标,Oracle数据库从3个层次上采取安全控制策略:系统安全性。在系统级别上控制数据库的存取和使用机制,包括有效的用户名与口令、是否可以连接数据库、用户可以进行哪些系统操作等;数据安全性。在数据库模式对象级别上控制数据库的存取和使用机制。用户要对某个模式对象进行操作,必须要有操作的权限;网络安全性。Oracle通过分发Wallet、数字证书、SSL安全套接字和数据密钥等办法来保证数据库的网络传输安全性。数据库的安全可以从以下几个方面进行管理:用户账户管理用户身份认证方式管理。Oracle提供多种级别的数据库用户身份认证方式,包括系统、数据库、网络3种类型的身份认证方式权限和角色管理。通过管理权限和角色,限制用户对数据库的访问和操作数据加密管理。通过数据加密来保证网络传输的安全性表空间设置和配额。通过设置用户的存储表空间、临时表空间以及用户在表空间上使用的配额,可以有效控制用户对数据库存储空间的使用用户资源限制。通过概要文件设置,可以限制用户对数据库资源的使用数据库审计。监视和记录数据库中的活动,包括审计所有的SQL语句、审计SQL权限、审计模式对象以及审计网络活动等