2017-08-28 22 views
2

は私がスクリプトを実行中に出力に含まをクリアするためにos.system('cls' if os.name == 'nt' else 'clear')を使用していたが、codacyに、私はシェル、検出された可能性注入、セキュリティ上の問題とプロセスを開始する1つのsecuriy問題Pythonでセキュリティの問題を解決するには?

を取得しています。

この問題を解決するにはどうすればよいですか?

スクリプトリンク:https://www.codacy.com/app/vaibhavsingh97/StalkPy/file/9458582870/issues/source?bid=5189215&fileBranchId=5189215#l43

+1

は単に – Nabin

+0

をos.system使用していませんか? –

+0

画面を消去したいシナリオを教えてください。 – Nabin

答えて

1

あなたはユーザーから取られた引数で関数を実行したときにそれはちょうど、セキュリティ上の問題があります。たとえば:方法は、例えば

do_clear('rm -f */*') 

のために呼び出された場合

import os 
def do_clear(command): # Notice command is sent as argument from outside world and hence this makes it vulnerable 
    os.system(command) 

は、次に現在のディレクトリのすべてのファイルを削除することが可能です。しかし、 'clear'コマンドを直接使用する場合は、すべての条件で 'clear'だけが実行されるため、セキュリティの問題を心配する必要はありません。したがって、以下の機能は十分に安全です。どのように私はPythonで、端末出力をクリアすることができます@Nabin

def do_clear(): # Notice command is not sent as argument from outside world 
    os.system('cls' if os.name == 'nt' else 'clear') # This is not risky as os.system takes clear/cls command always. 
1

subprocessモジュールは 新しいプロセスを生成し、その結果を取得するためのより強力な機能を提供してい

os.systemから。そのモジュールを使用することは、この機能を使用することよりも好ましい です。 のサブプロセスドキュメントのサブプロセスモジュールセクションを参照してください。 役立つレシピ

私は、パラメータshell=Falseとしてsubprocess通過のいずれかでテストをお勧めしてcodacyにその仕事かどうかを確認します。 subprocess.run(['clear'])は、私のローカルPythonインタプリタで動作しましたが、コードシェアに関してテストする必要があります。

は、Python 2.xの場合は、試すことができます:

subprocess.call(['clear']) 
+0

これを与えるためには、 '' os.name == 'nt' else ['clear']の場合に 'subprocess.run(['cls'])を使うことができます。 –

+0

subprocess.run()は' python 3.5'以上でのみ動作しますだからpython 2.7のサポート –

+0

@ VaibhavSingh私は答えを編集しました。 –

関連する問題