1. ホーム
  2. javascript

JSONセキュリティのベストプラクティス?

2023-09-01 22:42:09

質問

の問題を調査しているときに JSON と XML の比較 を調べているときに、私は この質問 . さて、JSONを好む理由の一つは、JavaScriptで変換の容易さとして、すなわちと記載されていた eval() . しかし、これはセキュリティの観点から問題がある可能性があるとすぐに思いました。

そこで私は、JSON のセキュリティの側面について調べ始め、次のようなブログ投稿に出会いました。 JSON は人々が思っているほど安全ではない . この部分が印象的でした。

更新しました。 もし、あなたがJSONを100%正しく行っているのであれば を適切に実行しているならば、トップレベルの オブジェクトしかありません。配列です。 文字列、数値など、すべてラップされます。 ラップされます。JSONオブジェクトは というのは、JavaScript インタプリタがオブジェクトではなくブロックを見ていると判断するためです。 を見ていると判断するためです。これは に対する防御に大いに役立ちます。 このような攻撃から保護するのに非常に有効ですが、それでも で安全なデータを保護するのが最善です。 予測不可能な URL で安全なデータを保護するのが最善です。

OK、では、これは良いルールから始めましょう。トップレベルのJSONオブジェクトは常にオブジェクトであるべきで、配列、数値、文字列ではあってはならないのです。 私には良いルールのように聞こえます。

JSONとAJAXに関連するセキュリティに関して、他にすべきこと、避けるべきことはありますか?

上記の引用の最後の部分は、予測不可能なURLについて言及しています。 これに関する詳細な情報、特にPHPでどのように行うかについて、どなたかご存知ですか? 私はPHPよりもJavaの方がはるかに経験があり、Javaではそれは簡単です (単一のサーブレットにURLの全範囲をマップすることができるという点で) が、私が行ったすべてのPHPはPHPスクリプトに単一のURLをマップしています。

また、セキュリティを高めるために、予測不可能なURLを具体的にどのように使用するのでしょうか?

どのように解決するのですか?

ブログで紹介されている主なセキュリティホール(CSRF)は、JSONに特化したものではありません。代わりに XML を使用しても、同じように大きな穴があります。実際、非同期呼び出しがまったくない場合も同様で、通常のリンクも同様に脆弱です。

人々がユニークな URL について話すとき、一般にそれは http://yourbank.com/json-api/your-name/big-long-key-unique-to-you/statement . 代わりに、リクエストに関する他の何かをユニークにすることがより一般的です; すなわち、FORMの投稿の値、またはURLパラメータです。

通常、これはサーバー側でFORMに挿入されるランダムなトークンを含み、リクエストが行われたときにチェックされます。

配列/オブジェクトというのは初耳です。

Script-Tagのことです。攻撃者はリモートサーバを指す スクリプトタグを埋め込むことができます。 を埋め込むことができ、ブラウザは効果的に しかし、ブラウザはその応答を捨ててしまいます。 レスポンスを捨てます。 JSONはすべてのレスポンスなので、安全です。

この場合、あなたのサイトはJSONをまったく使わなくても脆弱になります。しかし、もし攻撃者があなたのサイトにランダムなHTMLを挿入することができれば、あなたは破滅です。