ホームページ > バックエンド開発 > Python チュートリアル > Python の eval() 関数の危険性の簡単な分析

Python の eval() 関数の危険性の簡単な分析

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-16 08:43:28
オリジナル
1947 人が閲覧しました

一般的に、Python の eval() 関数は文字列「123」を数値型 123 に変換できますが、PP3E は、これは危険であり、他のコマンドも実行できると言っています。

これを使っていくつかの実験をしてください。案の定、年齢などの入力ボックスの内容を変換するために Python で書かれた CGI プログラムで int() の代わりに eval() が使用される場合、非常に危険です。システム内のすべてのファイルを表示および一覧表示できるだけでなく、ファイルの削除やファイルのソース コードの表示などの危険な操作を実行することもできます。

プログラムを書こうとして、この形式でローカルスクリプトファイルを一行ずつサーバー上のファイルに書き込もうとしたのですが、改行文字「/n」が入力できずに結局失敗してしまいました。 、送信されたステートメントに改行文字が含まれている限り、エンコード方法を変更した後でも EOL エラー メッセージが表示されます。

Web ページには名前を送信するためのウィンドウがあります。これを変更する場合は、eval 関数を使用して名前が変換されません。ただし、古い場合は問題が発生しやすくなります。このファイル (http://localhost/tutor4.html) は OS をインポートします。

line1 = "Hello, %s." % eval(form['user'].value)
ログイン後にコピー

(1)

os.system('del * /q') #删除当前目录下所有文件(不包括文件夹)。
ログイン後にコピー

os.system は現在のシステム (Windows など) のコマンドを呼び出します

/q
必須ステータスを指定します。削除を確認するプロンプトは表示されません。

(2) フォルダを削除したい場合はrmdirを使用します

/秒
指定されたディレクトリとすべてのサブディレクトリ、およびそれらに含まれるすべてのファイルを削除します。ディレクトリ ツリーを削除するには、/s を使用します。

/q
rmdir を Quiet モードで実行します。確認せずにディレクトリを削除します。

os.system('rmdir d:/workspace /s/q')
ログイン後にコピー

(3) すべてのファイル os.system('dir') をリストします。 dir コマンドが正常に実行された後、システムは 0 を返すため、返される内容は Hello, 0 のみです。サーバー上では実際にログが存在する場合、それが検出される可能性があります。 os.system('dir >dir.txt') を送信し、http://localhost/dir.txt にアクセスすると、すべてのファイルとフォルダーが公開されます。ソース コードを確認しますか? os.system('type target.py') を再度使用すると、コマンドが正常に完了すると、Hello, 0. も返されます。別のファイルを入れて、そのファイルに再度アクセスする必要がありますか? open('target.py').read()

ここから、他のフォルダーの内容を一覧表示して表示できます。

他に悪いことをしていない場合は、発見されるのを避けるために dir.txt を削除できます。 os.system('del dir.txt /q')

OS をインポートし、次のコマンドを実行します:

__import__('os').system('dir >dir.txt')
ログイン後にコピー
関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート