0
hidden = random.random()
val = input("Guess the value of the randomly generated number. ")
if float(val) == hidden:
     print("You got it!")
else:
     print("Sorry. You missed.")

ちょっとみんな、この生の入力を悪用して、プログラム内から変数「非表示」の値をリークする方法はありますか? つまり、入力だけでコード行を実行できますか? プログラムを攻撃するフォーマット文字列を試しましたが、うまくいきませんでした。注: コードは変更できません。

助言がありますか?

4

2 に答える 2

1

Python 2 では、はい、 を使用しなかったためraw_input、 を使用しinputました。したがって、プロンプトで「hidden」と入力すると、魔法のように正しく表示されます (変数の値を評価するためhidden)。

Guess the value of the randomly generated number. hidden
You got it!

Python 3 では、できinputませraw_inputん。これは、値を文字列としてのみ扱うことで、この種のこっそりを回避するためです。

于 2014-12-01T03:02:43.697 に答える
0

(Python 2.x で) getを使用して、適切なオブジェクト (ファイル オブジェクトなど)inputのメソッドを含む任意の式を評価できます。write

$ python tmp.py
Guess the value of the randomly generated number. open("/dev/tty", "w").write(str(hidden))
0.111568033994Traceback (most recent call last):
  File "tmp.py", line 6, in <module>
    if float(val) == hidden:
TypeError: float() argument must be a string or a number

入力文字列open("/dev/tty", "w").write(str(hidden))は をトリガーしTypeErrorますが、文字列が評価される前ではなく、 の値がhidden現在の端末に書き込まれます。この例は、OS に依存しており、/dev/tty存在することを前提としていますが、値がすぐに表示されるようにするためだけに使用しました。ユーザーが書き込み権限を持つ任意のファイルを使用でき、Python スクリプトが存在した後にファイルの内容を表示できます。

コードに が含まれていた場合は、代わりimport sysに入力を使用できます。sys.stdout.write(hidden)

コードに が含まれていた場合は、代わりfrom __future__ import print_functionに入力を使用できます。print(hidden)

于 2014-12-01T03:23:01.653 に答える