まあ、そこにいるほとんどの人は、eval
が悪いと言っています。それは99%の状況で真ですが、私が書いたコードのいくつかについてはeval
を使っています。危険な?EVAL()。これは危険ですか?
私は元funtionalityを維持しながら、可能な限り最もなどのデータをサニタイズしようとしたが、これはeval
を使用すると、何かが間違って行くことができます、このコードは下に実行することになっているすべての
import os
try:
if os.environ["LANG"].rstrip('''\n''')[5:] == ".UTF-8":
Language = str(os.environ["LANG"].rstrip('''\n''').rstrip(os.environ["LANG"].rstrip('''\n''')[5:]))
eval (str("LP." + Language + "()"))
else:
raise Exception("Not an UTF-8 locale")
except KeyError:
LP.Fallback()
except AttributeError:
LP.Fallback()
ファーストUNIXおよびデリバティブ
python2.7で書きました。
これは、LP
クラス内のいくつかのメソッドを呼び出すことです。
私のコードはLANG
VAR &の最後の5つの文字を削除したので、私はalredy、台無しrm -rf /
またはsimilarsのように、私のPCに害を及ぼす可能性があり、任意の文字列に私のLANG
システム変数を変更しようとしている私のPCにしようとしたが、しました開始時にLP.
を追加し、最後に()
を追加すると、文字列の最後の5文字がUTF-8
であるかどうかを最初から確認していることは言及せずにこのように表示されますが、その条件を削除した場合は "有害な"コマンドになります:
LP.rm -r()
これまでのところ、 5文字以上のコマンドは、「最後の5文字を削除」の行をバイパスすることはできません。また、LP.
& ()
を追加すると、害を防ぐことができます。
今まで、私は、任意の重大なエラーを回避するために、」.UTF-8" にしておこう...
それが必要として、これは働いていた:
注意を
rstrip
もの何度も実行する必要はありません。 'endswitch'と' getattr'について知りませんでした。そのような高速応答、ありがとう! P.S: 'eval'は他のコマンドと100%交換できますか?または、それが唯一の解決策であるときは時々ありますか? – PythonNoob私はそれが唯一の解決策である時があると確信しています。さもなければ、それは言語にまったくないでしょう。彼らはかなり珍しいはずです。 –
すべての情報をありがとう。 – PythonNoob