質問
はありませ利用することが発生する可能性があるこのシナリオ:
eval(repr(unsanitized_user_input), {"__builtins__": None}, {"True":True, "False":False})
場所 unsanitized_user_input
はstrオブジェクトです。この文字列は、ユーザーの発生が起きる。と仮定して当社のウェブフレームワークな失敗では不正直なる神のインスタンスstrからのPython builtins.
これは危険でまいりましたかの入力で安全ですか?
まん な を実行したいものに含まれる文字列です。
参照:
大きなコンテキストのコ(い)には欠かせない質問をいただいているのは、"いま、何千人もの:
repr([unsanitized_user_input_1,
unsanitized_user_input_2,
unsanitized_user_input_3,
unsanitized_user_input_4,
...])
場合にnested:
repr([[unsanitized_user_input_1,
unsanitized_user_input_2],
[unsanitized_user_input_3,
unsanitized_user_input_4],
...])
ている自分に変換文字列 repr()
, に置いて、永続的な保存と読み込メモリーます。......
<エバール>の直列化復元の文字列からの持続的な記憶領域のよりもかなり早く、漬け込み、simplejson.の通訳者はPython2.5なjson、astない可能です。No Cモジュールを許cPickleはできません。
解決
それは確かに危険と安全にインタビューを受けたことがあ ast.literal_eval
( ast モジュールの標準図書館)きのコースを変更する ast
の提供など評価変数のようにする前に<エバール>のASTがこの文字列).
の活用の eval
始まりのanyオブジェクトで取得し、その手(い True
こともあります。__クラス_はその型のオブジェクト等最 object
, しくはそのサブクラスで...基本的にはできるのANYオブジェクトタイプと難破した男.で特定されないと思いませんので、公開フォーラムの活用は有名ですが、考え方を多くの人が無視で明らかにしwannabeスクリプトお客様が解決を難しくしている印象...だけは避け eval
にunsanitizedユーザー入力時は、仲良く暮らしができます。-).
他のヒント
の場合を証明できるものを超えることは間違い unsanitized_user_input
は str
インスタンスからPythonの組込みコマンドも改ざん、これは常に安全です。実だき、安全でなくてもすべての余分の引数から eval(repr(astr)) = astr
そのようなすべてのstringオブジェクト。に入れますので、文字列が返されますが、文字列になります。またescape unescapeます。
このすべてのなんだよね、というのは eval(repr(x))
ない--なコードが実行されない限り、誰です unsanitized_user_input
オブジェクトのように見える文字列でもないが、これは別の問題--ないというコピー文字列インスタンスの最も遅い方も可能です。D.
すべてについて説明していただけまでは技術的に安全に<エバール>repred文字列、ただし、いを避けることにかくというトラブル:
あすかコーナーがおこのみrepred文字列が格納されます(例バグは異なる経路を保存しないrepr瞬時にbecmesコード注入攻撃がかさunexploitable)
でもその設定でよろしければOKですので、前提が変更時点で、unsanitisedデータが格納される分野の人に認知していないの<エバール>のコードです。
コードが再利用又は悪しきにつけ、コピー+貼り付け)の状況なんでしょうか。
として アレックスMartelli 指摘されたのは、python2.6以上がast.literal_evalる安全に取扱う文字列やその他の簡単なデータ型のようなタプル.これはおそらく、最も完全な解決策です。
もうひとつの可能性があるの string-escape
コーデック.このよeval(約10倍にtimeit)、以前のバージョンによliteral_eval、なにをしたい:
>>> s = 'he\nllo\' wo"rld\0\x03\r\n\tabc'
>>> repr(s)[1:-1].decode('string-escape') == s
True
([1:-1]はグレーのクラムシェル型クランプの外積代表が追加されます。)
一般的には、アナフィラキシー様許 誰でも 投稿コードです。
いわゆる"有料プログ"ハート-十分な時間をコンピュータを実際に作品。
受け入れコードから匿名の公的な利益の質は最悪のシナリオをすべて.
プロのプログラマーなく、固形式QAまだハッシュのほとんどのウェブサイトです。実際、私は逆工学部信じられないほど悪いコードから支払ます。
の考え方を非専門--私QA--後のコードは本当に恐ろしいです。
repr([unsanitized_user_input_1, unsanitized_user_input_2, ...
...
unsanitized_user_input
はstr
オブジェクト
ないと思いまするserialise文字列を保存しているデータベース..
これらはすべて文字列化していない-ができないのはなぜであなただけの文字列に db.StringListProperty
?
入れ子の応募が少し複雑なんですが、そこはかるでしょうか?にしたときのリゾートには<エバール>へのからのデータを取得し、データベースしょうか..
なお各店舗 unsanitized_user_input_x
としてで db.StringProperty
続いてグループによって、参照下さい。
のいずれかの者には適用されないてんかんを達成しようと、私は-することはできない構造のデータがないな eval
(もなか)について-セキュリティ問題)?