0

ユーザーがPDFファイルをアップロードして他のユーザーがダウンロードできるようにするWebアプリケーション(pythonおよびDjango)を構築しています。ユーザーが PDF に埋め込まれたウイルスをアップロードできないようにするにはどうすればよいですか?

更新: clamcv を使用する django スニペットでこのコードを見つけました。これでうまくいきますか?

def clean_file(self):
    file = self.cleaned_data.get('file', '')
    #check a file in form for viruses
    if file:
        from tempfile import mkstemp
        import pyclamav
        import os
        tmpfile = mkstemp()[1]
        f = open(tmpfile, 'wb')
        f.write(file.read())
        f.close()
        isvirus, name = pyclamav.scanfile(tmpfile)
        os.unlink(tmpfile)
        if isvirus:
            raise forms.ValidationError( \
            "WARNING! Virus \"%s\" was detected in this file. \
            Check your system." % name)

    return file
4

2 に答える 2

1

一般に、このタスクを実行するには、任意のウイルス スキャン ソフトウェアを使用できます。

  • ファイルのウイルス スキャナーを呼び出すコマンド ライン文字列を生成します。
  • python サブプロセスを使用して、次のようにコマンド ライン文字列を実行します。

    try:
        command_string = 'my_virusscanner -parameters ' + uploaded_file
        result = subprocess.check_output(command_string,stderr=subprocess.STDOUT,shell=True)
        #if needed, do something with "result"            
    except subprocess.CalledProcessError as e:
        #if your scanner gives an error code when detecting a virus, you'll end up here
        pass 
    except:
        #something else went wrong
        #check sys.exc_info() for info
        pass
    

ソースコードをチェックしなくてもpyclamav.scanfile、多かれ少なかれ同じことをしていると思います-したがって、clamavを信頼するなら、うまくやっているはずです. ist を信頼できない場合は、任意のウイルス スキャナで上記の方法を使用してください。

于 2013-10-20T03:51:24.463 に答える