たとえば、ソートアルゴリズムを入力として受け取り、アルゴリズムが部分的に正しいかどうかを経験的に判断するプログラムを作成する場合、文字列入力を実行可能プログラムにどのように変換すればよいでしょうか?私はexecかevalを使って示唆された他のスレッドを読んだが、セキュリティ上のリスクのためにこのメソッドを使うことを推奨していない。文字列を実行可能なコードに変換することを伴わないプログラムを作成する方法はありますか?あるいは、それは本質的に実装に関係なく危険なプログラムになるでしょうか?最後に、そのようなプログラムを定義するためのより良い代替手段となる別のプログラミング言語がありますか?ユーザーからのコードを読んで、そのコードを実行した場合Pythonでユーザコードを安全に操作する方法は?
答えて
任意のコードが実行
どんなにあなたが選ぶどのような言語、それは危険なことはないだろう。 ifs、ands、butsはありません。 Pythonのexecとevalに対する同じ警告が、Javascript、PHP、および他の多くの言語にも記載されています。
安全に文字列からコードを実行
事前に定義された関数に文字列をマッピングするための安全な方法がありますが、任意のコードをコンパイル/解釈して実行するためのいかなる安全な方法はありません。
一つの良い例が安全に文字列に機能をマッピングする方法については以下の通りである。そこに同じように、潜在的に、
functions = {
'print': print,
'str': str,
'int': int
}
name = input('Choose from the above functions here')
functions.get(name)()
静的コード分析
そして、最終的な答えのために、ありませんソートアルゴリズムを評価する方法ですが、コードをコンパイルしたり、少なくとも解釈したりすることなく、効果的、再現可能、正確である可能性は低いです。静的コード解析は難しく、これまでのところしかできません。
文は以下である場合は、静的コード解析は、単一でも、することができますどのように困難なため一つの簡単な例:このコードは、このようなPylintなどのエラーを(上げるだろうと思い静的コード分析を行う
for index, value in enumerate(range(10)):
if index and value - old == 1:
print(value)
old = value
いくつかのライブラリ最初に使用された後にold
が定義されていますが、bool(0)
はFalseと評価されるため、実際には最初のループの後でチェックされています。
入力の複雑さ、出力の複雑さ、および可能なソートアルゴリズムのバリエーションの数がすべて同等であると考えてください。コードをテストする最も簡単な方法は、それを実行することです。動的コード分析には限界がありますが、与えられた入力を使ってそれを所望の出力と比較すると、コードが正常に動作すれば良いアイデアを得ることができます。
私はあなたが 'index or old-value == 1ならば'と 'を意味すると思います.0がfalseで' falseまたはx == x'のすべてのxに対して – Copperfield
@Copperfield、 。やった。別のタイプミスもありました。ありがとう。 –
- 1. Firefox - 操作が安全でない[toDataURL]
- 2. SecurityError:操作が安全でない - window.history.pushState()
- 3. [NSOperationQueue操作]で列挙することは安全ですか?
- 4. PythonでMySQLに接続する:安全な方法ですか?
- 5. PHP:php_sapi_name()は安全ですか(ユーザーが操作できますか?)
- 6. 安全なログインシステムを作る方法
- 7. Pythonでexec()を安全に使う方法は?
- 8. 共有gitリポジトリで安全な操作は何ですか?
- 9. セッションを安全にカウントする方法:Session_Start/End in Global.Asaxは安全で安全ですか?
- 10. 安全に日付操作に使用する
- 11. Javaで安全なランダムAESキーを作成する方法は?
- 12. 最も安全な方法は、PHPでセッションを作成する
- 13. ハッシュ暗号で安全なログインページを作成する方法は?
- 14. Silverlight + WCF(データベース操作)は安全ではありません(プライバシー)?
- 15. Javaプログラムは、未チェックまたは安全でない操作
- 16. Pythonでjsonオブジェクトのリストの操作でグループを操作する方法は?
- 17. Python:PyPi public modules:安全で安全かどうかを判断する方法は?
- 18. ログインセッションを安全にする方法
- 19. Webサービススレッドを安全にする方法
- 20. キャッシュスレッドを安全にする方法
- 21. 明らかに純粋なHaskellインターフェイスが安全でない操作を隠すときを知る方法?
- 22. この方法は安全ですか?
- 23. 安全なパスワードフィールドでユーザーを作成する方法
- 24. 安全な方法
- 25. SecurityError:操作が安全ではありません。ファイルをアップロードする
- 26. コンボボックスを使用したJavaの安全でない操作
- 27. textField.textを安全にアンラップしてプロパティに安全に保存する方法
- 28. ファイルをアンドロイドでディスクに安全に保存する方法は?
- 29. Main.javaはチェックされていない操作または安全でない操作を使用します
- 30. Javaクラスはチェックされていない操作または安全でない操作を使用します
「文字列を実行可能プログラムに変換せずに文字列を実行可能プログラムに変換するにはどうすればよいですか」という質問がありますか? –
私の質問は「文字列を実行可能プログラムに変換せずにアルゴリズムが部分的に正しいかどうか、ソートアルゴリズムを入力として受け取り、経験的に決定するプログラムを書くことができますか? –
タイトルを変更することができます。 –