Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 保护/清除不受信任客户端对服务器的远程调用_Python_Rest_Api_Protocol Buffers_Rpc - Fatal编程技术网

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

Python 保护/清除不受信任客户端对服务器的远程调用,python,rest,api,protocol-buffers,rpc,Python,Rest,Api,Protocol Buffers,Rpc,我正在构建一个API,它将公开(除其他外)以下调用: 将文件上载到远程服务器 对远程上传的文件执行各种计算(通过一些可能的函数集) 我正试图在Python上实现这一点。当客户端不受信任时,意味着他们可以上传任意制作的文件,最佳做法是什么? 现在的标准程序是什么?RPC,REST,还有别的吗 我不需要担心身份验证和/或加密,请求可以是匿名的,也可以是透明的。MITM也不是一个问题 您应该将任何客户端视为不受信任的客户端,因此您的案例需要一种通用方法,可以在(v16:文件和资源验证要求)中找到。休息

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

  • 将文件上载到远程服务器
  • 对远程上传的文件执行各种计算(通过一些可能的函数集)
  • 我正试图在Python上实现这一点。当客户端不受信任时,意味着他们可以上传任意制作的文件,最佳做法是什么? 现在的标准程序是什么?RPC,REST,还有别的吗


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

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

    要点是:

    • 将文件存储在webroot之外(例如,静态页面服务器无法为其提供服务)
    • 避免将执行位设置为on(对于Linux)
    • 如果可能,将文件类型限制为知道好的文件类型(例如,根据白名单验证;按扩展名验证文件类型和按扩展名验证文件类型)
    • 在接受请求并将文件放入变量之前,检查文件是否具有适当的大小(您可以通过HTTP内容长度进行检查,并在传递到应用程序之前对其进行过滤)
    • 如果可能,请使用服务器防病毒软件检查文件
    • 如果文件返回给用户,请确保设置了适当的头(内容类型,无嗅探)。如果不是,则某些XSS场景是可能的
    • 验证文件名是否已清理,以免欺骗您的程序提供其他文件(例如,可能存在文件名“../../../../../../../../../../etc/passwd”将提供实际的/etc/passwd文件的情况)。如果文件名包含../或/序列,则拒绝请求
    • 永远不要将文件夹的路径与文件名连接起来,因为它可能会产生相同的问题
    • 如果通过调用命令行进行计算,请注意命令行注入(此问题和前2个问题可以通过向用户指定文件名格式来解决,例如,只接受不带空格或任何特殊字符的字母数字名称,并拒绝任何不符合模式的请求)
    • 如果可以,请按IP限制请求数

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

    要点是:

    • 将文件存储在webroot之外(例如,静态页面服务器无法为其提供服务)
    • 避免将执行位设置为on(对于Linux)
    • 如果可能,将文件类型限制为知道好的文件类型(例如,根据白名单验证;按扩展名验证文件类型和按扩展名验证文件类型)
    • 在接受请求并将文件放入变量之前,检查文件是否具有适当的大小(您可以通过HTTP内容长度进行检查,并在传递到应用程序之前对其进行过滤)
    • 如果可能,请使用服务器防病毒软件检查文件
    • 如果文件返回给用户,请确保设置了适当的头(内容类型,无嗅探)。如果不是,则某些XSS场景是可能的
    • 验证文件名是否已清理,以免欺骗您的程序提供其他文件(例如,可能存在文件名“../../../../../../../../../../etc/passwd”将提供实际的/etc/passwd文件的情况)。如果文件名包含../或/序列,则拒绝请求
    • 永远不要将文件夹的路径与文件名连接起来,因为它可能会产生相同的问题
    • 如果通过调用命令行进行计算,请注意命令行注入(此问题和前2个问题可以通过向用户指定文件名格式来解决,例如,只接受不带空格或任何特殊字符的字母数字名称,并拒绝任何不符合模式的请求)
    • 如果可以,请按IP限制请求数

    这是一个极好的回答。谢谢你,这正是我需要的底线。这是一个极好的答案。谢谢,这正是我需要的基线。