-2

print ステートメントに渡されるコマンドを実行するように変換しようとしています。例えば:

print "exec(raw_input())"

何らかの方法で exec() を実行できますか?

4

6 に答える 6

1

これを行う

command = raw_input("Command: ")
exec(command)

なぜ印刷しようとするのですか?これがあなたが探しているものでない場合は、より明確にしてください

于 2013-09-24T00:48:53.447 に答える
0

print適用したタグから、Python がその文字列をステートメントに渡すときに任意のコードを実行できるようにする魔法の文字列を探しているようです。

そのような既知の文字列はありません。従来のスタックオーバーフローとヒープオーバーフローのケースを探して、明らかな境界を越えて非常に長い文字列を試すこともできますが、Python XYZ で見つかった場合は、XYZ+1 で既に修正されている可能性があります。

Python スクリプトが実際に文字列に対してexecorevalを実行している場合、もちろんそれは簡単に悪用できます。実行しているだけの場合print、コンテンツはコンパイルされることさえありません。それらは単なる古い文字列です。ひもに危険そうなものが含まれているという事実execは関係ありません。Pythonに文字列を出力させるよりも悪用可能ではありません"rm -rf /"

もちろん、1 つの Python インタープリターの出力を別のインタープリターの対話型セッションへの入力としてフィードするように調整できれば、最初のインタープリターが出力したものはすべて 2 番目のインタープリターで実行されます…しかしその場合、execとにかく文字列の真ん中には必要ありません。

于 2013-09-24T00:58:55.950 に答える
0

次のような単純なものを求めていますか

aString = "raw_input()"
print "exec(" + aString + ")"
exec(aString)
于 2013-09-24T00:48:49.087 に答える