与他人分享你的Gradio应用(通过在Spaces上托管、在你自己的服务器上托管或通过临时分享链接)暴露了你机器上的某些文件到互联网上。
本指南解释了哪些文件被暴露,以及确保您机器上的文件安全的一些最佳实践。
gr.set_static_paths函数显式设置的静态文件。此参数允许您传入一个目录或文件名的列表,这些目录或文件将被视为静态文件。这意味着它们不会被复制到缓存中,而是直接从您的计算机提供。这可以帮助节省磁盘空间并减少应用程序启动所需的时间,但请注意可能的安全隐患。(默认情况下,此参数为空列表)。launch() 中的 allowed_paths 参数中的文件。此参数允许您传入一个额外的目录或确切文件路径的列表,您希望允许用户访问这些路径。(默认情况下,此参数为空列表)。
Gradio缓存中的文件。在启动Gradio应用程序后,Gradio会将某些文件复制到临时缓存中,并使这些文件对用户可访问。下面我们将更详细地解释这一点。
首先,了解为什么Gradio会有缓存是很重要的。Gradio在将文件返回给前端之前,会将文件复制到缓存目录中。这可以防止文件在一个用户仍需要时被另一个用户覆盖。例如,如果你的预测函数返回一个视频文件,那么Gradio会在你的预测函数运行后将视频移动到缓存中,并返回一个前端可以用来显示视频的URL。缓存中的任何文件都可以通过URL供你运行中的应用程序的所有用户使用。
提示: 您可以通过将`GRADIO_TEMP_DIR`环境变量设置为绝对路径(例如`/home/usr/scripts/project/temp/`)来自定义缓存的位置。
Gradio 将三种类型的文件移动到缓存中
gr.Chatbot的avatar_imagesBlocks.launch方法的allowed_paths参数中。tempfile.gettempdir()获取的临时目录中。注意:当前工作目录中名称以点(.)开头的文件不会被移动到缓存中,即使它们是从预测函数返回的,因为它们通常包含敏感信息。
如果这些标准都不满足,返回该文件的预测函数将引发异常,而不是将文件移动到缓存中。Gradio执行此检查是为了确保无法访问您机器上的任意文件。
用户上传到您的Gradio应用程序的文件(例如通过File或Image输入组件)。
提示: 如果任何时候Gradio阻止了你希望它处理的文件,请将其路径添加到`allowed_paths`参数中。
在运行时,Gradio 应用程序将不允许用户访问:
通过launch()中的blocked_paths参数显式阻止的文件。你可以向launch()中的blocked_paths参数传递一个额外的目录或确切文件路径的列表。此参数优先于Gradio默认暴露的文件,或由allowed_paths参数或gr.set_static_paths函数指定的文件。
主机上的任何其他路径。用户不应能够访问主机上的其他任意路径。
分享你的Gradio应用程序也将允许用户上传文件到你的电脑或服务器。你可以设置上传文件的最大大小,以防止滥用并节省磁盘空间。你可以通过.launch的max_file_size参数来实现这一点。例如,以下两个代码片段将每个文件的上传限制为5兆字节。
import gradio as gr
demo = gr.Interface(lambda x: x, "image", "image")
demo.launch(max_file_size="5mb")
# or
demo.launch(max_file_size=5 * gr.FileSize.MB)max_file_size。gr.Image、gr.File等)的函数返回任意用户输入。例如,以下接口将允许任何人将本地目录中的任意文件移动到缓存中:gr.Interface(lambda s: s, "text", "file")。这是因为用户输入被视为任意文件路径。allowed_paths尽可能小。如果allowed_paths中的路径是一个目录,则该目录中的任何文件都可以被访问。确保allowed_paths的条目仅包含与您的应用程序相关的文件。python app.py而不是python Users/sources/project/app.py。