0

ユーザー指定のパスがサニタイズされていることを確認するにはどうすればよいですか?

ワイルドカードやシェナニガンがないことを確認したいと思います。今、私はそれが正しいフォルダをエスケープしていないことを確認していますので:

if os.path.commonprefix([os.path.abspath(path),os.getcwd()]) != os.getcwd():
    # raise error etc..

しかし、すべての自作のセキュリティチェックコードのように、私はそれがより良い精査に耐えられることを望んでいます!そして、それはパスが実際に合法であることに対処していません。

次に、パスを使用してアセットなどを作成します。

4

1 に答える 1

4

あなたはWerkzeugのsecure_filenameを使うことができます:

werkzeug.utils.secure_filename(filename)

ファイル名を渡すと、安全なバージョンが返されます。このファイル名は、通常のファイルシステムに安全に保存して、に渡すことができますos.path.join()。返されるファイル名は、移植性を最大化するためのASCIIのみの文字列です。

Windowsシステムでは、この関数は、ファイルが特別なデバイスファイルの1つにちなんで名付けられていないことも確認します。

>>> secure_filename("My cool movie.mov")
'My_cool_movie.mov'
>>> secure_filename("../../../etc/passwd")
'etc_passwd'
>>> secure_filename(u'i contain cool \xfcml\xe4uts.txt')
'i_contain_cool_umlauts.txt'
于 2012-12-14T08:11:17.483 に答える