Python 保护/清除不受信任客户端对服务器的远程调用
我正在构建一个API,它将公开(除其他外)以下调用:Python 保护/清除不受信任客户端对服务器的远程调用,python,rest,api,protocol-buffers,rpc,Python,Rest,Api,Protocol Buffers,Rpc,我正在构建一个API,它将公开(除其他外)以下调用: 将文件上载到远程服务器 对远程上传的文件执行各种计算(通过一些可能的函数集) 我正试图在Python上实现这一点。当客户端不受信任时,意味着他们可以上传任意制作的文件,最佳做法是什么? 现在的标准程序是什么?RPC,REST,还有别的吗 我不需要担心身份验证和/或加密,请求可以是匿名的,也可以是透明的。MITM也不是一个问题 您应该将任何客户端视为不受信任的客户端,因此您的案例需要一种通用方法,可以在(v16:文件和资源验证要求)中找到。休息
我不需要担心身份验证和/或加密,请求可以是匿名的,也可以是透明的。MITM也不是一个问题 您应该将任何客户端视为不受信任的客户端,因此您的案例需要一种通用方法,可以在(v16:文件和资源验证要求)中找到。休息就可以了 要点是:
- 将文件存储在webroot之外(例如,静态页面服务器无法为其提供服务)
- 避免将执行位设置为on(对于Linux)
- 如果可能,将文件类型限制为知道好的文件类型(例如,根据白名单验证;按扩展名验证文件类型和按扩展名验证文件类型)
- 在接受请求并将文件放入变量之前,检查文件是否具有适当的大小(您可以通过HTTP内容长度进行检查,并在传递到应用程序之前对其进行过滤)
- 如果可能,请使用服务器防病毒软件检查文件
- 如果文件返回给用户,请确保设置了适当的头(内容类型,无嗅探)。如果不是,则某些XSS场景是可能的
- 验证文件名是否已清理,以免欺骗您的程序提供其他文件(例如,可能存在文件名“../../../../../../../../../../etc/passwd”将提供实际的/etc/passwd文件的情况)。如果文件名包含../或/序列,则拒绝请求
- 永远不要将文件夹的路径与文件名连接起来,因为它可能会产生相同的问题
- 如果通过调用命令行进行计算,请注意命令行注入(此问题和前2个问题可以通过向用户指定文件名格式来解决,例如,只接受不带空格或任何特殊字符的字母数字名称,并拒绝任何不符合模式的请求)
- 如果可以,请按IP限制请求数
- 将文件存储在webroot之外(例如,静态页面服务器无法为其提供服务)
- 避免将执行位设置为on(对于Linux)
- 如果可能,将文件类型限制为知道好的文件类型(例如,根据白名单验证;按扩展名验证文件类型和按扩展名验证文件类型)
- 在接受请求并将文件放入变量之前,检查文件是否具有适当的大小(您可以通过HTTP内容长度进行检查,并在传递到应用程序之前对其进行过滤)
- 如果可能,请使用服务器防病毒软件检查文件
- 如果文件返回给用户,请确保设置了适当的头(内容类型,无嗅探)。如果不是,则某些XSS场景是可能的
- 验证文件名是否已清理,以免欺骗您的程序提供其他文件(例如,可能存在文件名“../../../../../../../../../../etc/passwd”将提供实际的/etc/passwd文件的情况)。如果文件名包含../或/序列,则拒绝请求
- 永远不要将文件夹的路径与文件名连接起来,因为它可能会产生相同的问题
- 如果通过调用命令行进行计算,请注意命令行注入(此问题和前2个问题可以通过向用户指定文件名格式来解决,例如,只接受不带空格或任何特殊字符的字母数字名称,并拒绝任何不符合模式的请求)
- 如果可以,请按IP限制请求数