我有一个接收用户信息的网络表单。各种文本框的值用于构建一个html文件。我将此 html 写入文件(具有特定名称),然后提示用户保存此文件。此 html 用于创建 Outlook 电子邮件签名。目前我在应用程序中有这个 html。这已经部署到服务器上。我必须为所有用户设置此文件的写入权限才能使其正常工作。
是否存在任何安全风险?如果多个用户同时访问此应用程序并写入文件会发生什么情况。
我有一个接收用户信息的网络表单。各种文本框的值用于构建一个html文件。我将此 html 写入文件(具有特定名称),然后提示用户保存此文件。此 html 用于创建 Outlook 电子邮件签名。目前我在应用程序中有这个 html。这已经部署到服务器上。我必须为所有用户设置此文件的写入权限才能使其正常工作。
是否存在任何安全风险?如果多个用户同时访问此应用程序并写入文件会发生什么情况。
当您说文件具有“特定名称”时,您的意思是它始终是相同的名称吗?如果是这样,那么是的,如果多个用户同时使用此功能将会出现问题。他们将覆盖一个文件并下载彼此的数据。每次进程运行时,您都需要生成一个唯一的文件名以避免这种情况。
但是你真的需要保存文件吗?
还是您的目标纯粹是生成一些 HTML 供用户下载,而您这样做的方式是将其写入文件,然后提示他们下载该文件?
如果您不需要保存文件,而只需要生成 HTML 并提示用户保存,只需将其作为普通页面提供,并设置响应标头以便他们的浏览器将下载它。这些方面的东西:
Response.AddHeader("content-disposition", "attachment;filename=my_file.html");
据我了解,用户填写网络表单并提交。随即,会弹出一个 html 文件以供从服务器下载。我认为这是这个场景的非常巧妙的实现。您只需要确保正确释放资源以防止锁定文件。
当多个用户访问此应用程序时,它不应中断,因为使用特定名称创建单独的文件(正如您所提到的)。我不知道使用什么逻辑来创建唯一名称。在某些特殊情况下(这完全取决于您的名称计算逻辑),如果计算出的特定文件名不知何故变得与现有文件相似,您应该有代码来替换或创建相同文件名的不同版本。如果您将捕获的数据从 Web 表单一次又一次地写入同一个文件而不释放您的流/文件对象,则可能会发生锁定。确保在代码中使用后处理您的对象。
如果您将 Web 应用程序的应用程序池的访问权限授予对该文件/文件夹具有写入权限的用户,而不是授予每个人写入权限,那就太好了。这样,您的应用程序将获得执行写入操作的完全权限,而不是拥有权限的用户。如果用户对文件/文件夹具有写入权限,那么任何人都很容易窥视并做一些意想不到的事情。
希望这可以帮助。