1


0

IE7 vs. Pythonピクルスオブジェクト

IE7には、HTMLTMPLを使用したajax呼び出しでピクルスされたオブジェクトを渡したくないという問題があります。 IE8(および互換モード)およびFirefoxで動作します。

コマンドを使用してオブジェクトをピクルスしました:

newhash['pickled'] = pickle.dumps(hash)

JSは改行を好まなかったので、次を使用して正規表現を正規表現します。

newhash['pickled'] = re.sub('\n', 'LINEBREAK', newhash['pickled'])

Pythonで漬物をキャッチすると、LINEBREAKが取り出され、\ nに戻されます。 私のAjaxの呼び出しはこのようになります:

$.getJSON('/folder/MyPython.py', {'mode':'MyFunction', 'pickled':""}, function(data){

私はその直前と直後に警告を発し、すべてが期待どおりに機能します。 function(data)セクションでアラートを出すと、何もアラートを受け取りません。 ただし、ajax呼び出しで「Pickled」キーを取り出すと、すべて正常に機能します。 pickleされたオブジェクトは、私のPythonが計算を行うために必要なすべての変数であるため、単に渡さないことはオプションではありません。

私の漬け物は次のようになります:

(dp0LINEBREAKS'rlbool'LINEBREAKp1LINEBREAKL1LLINEBREAKsS'class7'LINEBREAKp2LINEBREAKS'50'LINEBREAKp3LINEBREAKsS'fedxbool'LINEBREAKp4LINEBREAKL1LLINEBREAKsS'weight1'LINEBREAKp5LINEBREAKS'1500'LINEBREAKp6LINEBREAKsS'conwaybool'LINEBREAKp7LINEBREAKL1LLINEBREAKsS'originzip'LINEBREAKp8LINEBREAKS'37130'LINEBREAKp9LINEBREAKsS'company'LINEBREAKp10LINEBREAKS''LINEBREAKp11LINEBREAKsS'destinationzip'LINEBREAKp12LINEBREAKS'37130'LINEBREAKp13LINEBREAKsS'class6'LINEBREAKp14LINEBREAKS'50'LINEBREAKp15LINEBREAKsS'mode'LINEBREAKp16LINEBREAKS'Crawl'LINEBREAKp17LINEBREAKsS'averitlogin'LINEBREAKp18LINEBREAKS'QVSINC'LINEBREAKp19LINEBREAKsS'accessories'LINEBREAKp20LINEBREAK(lp21LINEBREAKsS'address'LINEBREAKp22LINEBREAKS'330%20Robert%20Rose%20Blvd.'LINEBREAKp23LINEBREAKsS'active'LINEBREAKp24LINEBREAKL1LLINEBREAKsS'averittbool'LINEBREAKp25LINEBREAKL1LLINEBREAKsS'id'LINEBREAKp26LINEBREAKL19LLINEBREAKsS'averitpass'LINEBREAKp27LINEBREAKS'MERIDIAN'LINEBREAKp28LINEBREAKsS'shipmentdate'LINEBREAKp29LINEBREAKS'2010-10-08'LINEBREAKp30LINEBREAKsS'city'LINEBREAKp31LINEBREAKS'Murfreesboro'LINEBREAKp32LINEBREAKsS'class5'LINEBREAKp33LINEBREAKS'50'LINEBREAKp34LINEBREAKsS'last'LINEBREAKp35LINEBREAKS'Morgan'LINEBREAKp36LINEBREAKsS'originstate'LINEBREAKp37LINEBREAKS'TN'LINEBREAKp38LINEBREAKsS'zip'LINEBREAKp39LINEBREAKS'37129'LINEBREAKp40LINEBREAKsS'phone'LINEBREAKp41LINEBREAKS'615%20713-5432'LINEBREAKp42LINEBREAKsS'destinationstate'LINEBREAKp43LINEBREAKS'TN'LINEBREAKp44LINEBREAKsS'Accessories'LINEBREAKp45LINEBREAK(lp46LINEBREAKsS'comments'LINEBREAKp47LINEBREAKg11LINEBREAKsS'estesbool'LINEBREAKp48LINEBREAKL1LLINEBREAKsS'origincity'LINEBREAKp49LINEBREAKS'Murfreesboro'LINEBREAKp50LINEBREAKsS'class8'LINEBREAKp51LINEBREAKS'50'LINEBREAKp52LINEBREAKsS'state'LINEBREAKp53LINEBREAKS'TN'LINEBREAKp54LINEBREAKsS'email'LINEBREAKp55LINEBREAKS'chris2'LINEBREAKp56LINEBREAKsS'vitranbool'LINEBREAKp57LINEBREAKL1LLINEBREAKsS'saiabool'LINEBREAKp58LINEBREAKL1LLINEBREAKsS'destinationcity'LINEBREAKp59LINEBREAKS'Murfreesboro'LINEBREAKp60LINEBREAKsS'class3'LINEBREAKp61LINEBREAKS'50'LINEBREAKp62LINEBREAKsS'class4'LINEBREAKp63LINEBREAKS'50'LINEBREAKp64LINEBREAKsS'class1'LINEBREAKp65LINEBREAKS'50'LINEBREAKp66LINEBREAKsS'class2'LINEBREAKp67LINEBREAKS'50'LINEBREAKp68LINEBREAKsS'address2'LINEBREAKp69LINEBREAKg11LINEBREAKsS'first'LINEBREAKp70LINEBREAKS'Chris'LINEBREAKp71LINEBREAKs.

ここには、IE7に問題があるという特徴があると推測できます。

すべての助けを事前に感謝します。

3 Answer


4


まず、http://nadiana.com/python-pickle-insecure [Python Pickleが安全でない理由]を読んでください。 ユーザーが変更できる可能性のある漬物を使用しないでください。

代わりに、明らかにJSONを使用しないでください。これは明らかにJavaScript用に作成されています。 Python 2.6以上に含まれており、古いバージョンでも使用できます。 データは単なる辞書であるため、JSONは正常に機能するはずです。

別のオプションはbase-64エンコーディングで、特殊文字に悩まされることはありません。


1


これは、ユーザーの側で漬物データを変更できることを意味しますか? 高いセキュリティリスクになります。


0


答えはURLの長さでした。 リクエストURLの最大長は2083です。 一定!