は私がスクリプトを実行中に出力に含まをクリアするためにos.system('cls' if os.name == 'nt' else 'clear')
を使用していたが、codacyに、私はシェル、検出された可能性注入、セキュリティ上の問題とプロセスを開始する1つのsecuriy問題Pythonでセキュリティの問題を解決するには?
を取得しています。
この問題を解決するにはどうすればよいですか?
は私がスクリプトを実行中に出力に含まをクリアするためにos.system('cls' if os.name == 'nt' else 'clear')
を使用していたが、codacyに、私はシェル、検出された可能性注入、セキュリティ上の問題とプロセスを開始する1つのsecuriy問題Pythonでセキュリティの問題を解決するには?
を取得しています。
この問題を解決するにはどうすればよいですか?
あなたはユーザーから取られた引数で関数を実行したときにそれはちょうど、セキュリティ上の問題があります。たとえば:方法は、例えば
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.
subprocessモジュールは 新しいプロセスを生成し、その結果を取得するためのより強力な機能を提供してい
os.systemから。そのモジュールを使用することは、この機能を使用することよりも好ましい です。 のサブプロセスドキュメントのサブプロセスモジュールセクションを参照してください。 役立つレシピ
私は、パラメータshell=False
としてsubprocess通過のいずれかでテストをお勧めしてcodacyにその仕事かどうかを確認します。 subprocess.run(['clear'])
は、私のローカルPythonインタプリタで動作しましたが、コードシェアに関してテストする必要があります。
subprocess.call(['clear'])
これを与えるためには、 '' os.name == 'nt' else ['clear']の場合に 'subprocess.run(['cls'])を使うことができます。 –
subprocess.run()は' python 3.5'以上でのみ動作しますだからpython 2.7のサポート –
@ VaibhavSingh私は答えを編集しました。 –
は単に – Nabin
をos.system使用していませんか? –
画面を消去したいシナリオを教えてください。 – Nabin