簡単な質問。 JavaScriptでの評価は安全ではありませんか?文字列としてJSONオブジェクトがあり、データを取得できるように、それを実際のオブジェクトに変換する必要があります。
function PopulateSeriesFields(result)
{
data = eval('(' + result + ')');
var myFakeExample = data.exampleType
}
それが役立つ場合は、jQueryの$ .ajaxメソッドを使用しています。
ありがとう
安全かどうかは別として、jQueryを使用している場合は、$。ajax()ではなく $。getJSON() メソッドを使用することをお勧めします。
_$.getJSON(url, function(data){
alert(data.exampleType);
});
_
eval()
は通常、自分のサーバーとのみ通信している場合、特に生成されたJSONに厄介なものが含まれないことを保証するサーバー側で優れたJSONライブラリを使用している場合、JSON解析に対して安全であると見なされます。
JSONの作成者であるDouglasCrockfordでさえ、JSONの解析を除いて、コード内のどこでもeval()
を使用すべきではないと述べました。彼の本の対応するセクションを参照してください JavaScript:The Good Parts
[〜#〜] json [〜#〜] を使用して、JSON.parseを作成する必要があります。
「手動」解析は遅すぎるため、ライブラリからのJSON.parse実装は内容をチェックし、evalを使用することになります。したがって、 まだ安全ではありません です。ただし、新しいブラウザ(IE8またはFirefox)を使用している場合、ライブラリコードは実際には実行されません。代わりに、ネイティブブラウザサポートが開始され、安全になります。
ソースを信頼できない場合は、正しいです... evalは安全ではありません。これは、ページにコードを挿入するために使用できます。
より安全な代替手段については、このリンクを確認してください。
このページでは、evalが安全でない理由を説明し、ページの下部にJSONパーサーへのリンクを提供します。
安全ではありませんか?それはあなたがデータを信頼できるかどうかに依存します。
文字列がJSONである(そして、たとえば関数を含まない)と信頼できる場合は、安全です。
そうは言っても、jQueryを使用しているのなら、なぜこれを手動で行っているのですか? dataType オプションを使用して、それがJSONであることを指定し、ライブラリに自動的に処理させます。
JQueryを使用している場合、バージョン1.4.1以降、jQuery.parseJSON()を使用できます。
この答えを参照してください: jqueryで安全なjson解析?
JavaScriptのeval
を使用することは安全ではありません。 JSONはJavaScriptのサブセットにすぎませんが、JavaScriptのeval
は任意の有効なJavaScriptを許可するためです。
代わりに、 json.orgのJSONパーサー のような実際のJSONパーサーを使用してください。
コードを評価する代わりに、手動でコードを解析することもできます。思ったほど難しくはありませんが、実行時にはかなり重くなります。 ここでそれについて読むことができます。
注意すべき重要な部分は、JSONの評価は本質的に安全ではないということです。ソースが物事を台無しにしないことを信頼している限り。これには、JSONエンコーダーに渡されたものが適切にエスケープされていることを確認することも含まれます(ユーザーのマシンでコードを実行するストリームの2ステップ上の人々を停止するため)。
あなたはこのようにそれを試すことができます
var object = new Function("return " + jsonString)()
もう1つの優れた代替手段はYUIです: http://yuilibrary.com/yui/docs/json/
したがって、コードは次のようになります。
Y.JSON.parse('{"id": 15, "name": "something"}');