保护/清理不受信任的客户端对服务器的远程调用

问题描述 投票:0回答:1

我正在构建一个API,它将公开(除其他外)以下调用:

  1. 将文件上传到远程服务器。
  2. 在远程上传的文件上执行各种计算(通过一些可能的功能集)。

我试图在Python上做这个。客户端不受信任时的最佳做法是什么,这意味着他们可以上传任意制作的文件?现在的标准程序是什么? RPC,REST,别的什么?

我不需要担心身份验证和/或加密,请求可以是匿名的,也可以是明确的。 MITM也不是一个问题。

python rest api protocol-buffers rpc
1个回答
2
投票

您应该将任何客户端视为不受信任,因此您的案例需要一种通用方法,可以在OWASP ASVS(v16:文件和资源验证要求)中找到。 REST可以用于此目的。

要点是:

  • 存储webroot之外的文件(例如,它不能由静态页面服务器提供)
  • 避免设置执行位(对于Linux)
  • 如果可能的话,将文件类型限制为知识好的(例如,对白名单进行验证;通过扩展和qazxsw poi验证文件类型)
  • 在接受请求并将文件放入变量之前检查文件是否具有适当的大小(您可以通过HTTP内容长度检查它并在传递给应用程序之前对其进行过滤)
  • 如果可能,请检查服务器防病毒文件
  • 如果将文件提供给用户,请确保设置了适当的标头(内容类型,无嗅探)。如果不是,则可以使用某些XSS方案
  • 验证文件名是否已被清理,以便它们不会欺骗您编程以提供其他文件(例如,可能存在文件名“../../../../../../etc/passwd”将提供实际的/ etc / passwd文件)。如果filename包含../或/ sequences,则拒绝请求。
  • 不要使用文件名连接文件夹的路径,因为它可能会产生同样的问题
  • 如果计算将通过调用命令行进行,请注意命令行注入(此问题和2之前的问题可以通过为用户指定文件名格式来解决,例如,只接受不带空格或任何特殊字符的字母数字名称并拒绝任何请求这不符合模式)
  • 如果可以,请按IP限制请求数量
© www.soinside.com 2019 - 2024. All rights reserved.