3

Java では、文字列を取り、LinkedHashMap. 問題なく JSON に変換して元に戻すこともできます。

私は現在 Node.JS/JavaScript を使用していますが、処理されない特殊なケースがあります。

var makesSense = '{"__proto__":"foo","toString":"bar"}'
var noSense = JSON.stringify(JSON.parse('{"__proto__":"foo","toString":"bar"}'))
console.log(noSense) // outputs {"toString":"bar"}

おすすめの扱い方__proto__などなど。問題が発生していないように見えtoStringますが、信頼できないデータを一貫して処理する必要があるとします。推奨される解決策は何ですか?

  • すべてのキーの前に余分な文字を追加しますか? もしそうなら、どのキャラクターが最も理にかなっていますか? アンダースコアを使用できないことはわかっていますが、スペースはどうでしょうか。
  • これを処理するモジュールを使用しますか? これを便利に処理し、過剰な機能を持たないものが欲しい. (一部の機能は便利ですが)
  • 他の何か?と互換性のあるソリューションはありJSON.parseますか?

なぜこれが重要なのですか?確かに、実際に__proto__偶然にタイプする人はいません。しかし、彼らが意図的にこれを行っていたとしたらどうでしょう。彼らは私が JavaScript を使用していることを知りました。・以下の場合以外は問題ありません。

  • ソフトウェアには文字列の配列があります。__proto__これらの文字列の 1 つが、誰かが私のソフトウェアを壊そうとしてうろついていたので、たまたまそう言ったのです。
  • ソフトウェアはこれらの文字列をキーとして使用して Map を作成し、Map に適切なデータを入力します。
  • ソフトウェアは後で文字列の配列を調べて、マップから情報を収集します。Map は null を返し、次にブーム: null ポインター例外を返します。
  • ソフトウェアが動作しなくなりました。これは、サービス拒否のようなものと見なされます。

そのような状況はめったにないことはわかっていますが、私はそれが好きではありません。私が使用しているプログラミング言語のすべての癖を思い出すことはできないので、十分な時間があれば、この種のコードを書かなければなりません。

改ざんされないコードを作成することに誇りを持っています。そのため、ソフトウェアからこれらのピンホールを排除しようとしています。

はい、これらは非常にマイナーですが、少なくとも StackOverflow の質問をして、私が知っているよりも優れた回答があるかどうかを確認する価値があります。私はこの方法で多くのことを学びます。

4

1 に答える 1

0

すべてのキーの前に余分な文字を追加しますか? もしそうなら、どのキャラクターが最も理にかなっていますか? アンダースコアを使用できないことはわかっていますが、スペースはどうでしょうか。

を使用しますがx、任意です。__proto__(一部のエンジンでは) 、 またはtoString、またはvalueOf(および で始まる特別なプロパティ名は知りません) のような特別なプロパティ名を形成する可能性が低いものを使用する限り、問題ありxません。

于 2013-02-06T21:42:48.443 に答える