JSONセキュリティのベストプラクティス?
質問
の問題を調査しているときに
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を挿入することができれば、あなたは破滅です。
関連
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] 後で平文を取り出すためのユーザーパスワードの保管について、倫理的にどのように取り組むべきでしょうか?
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] XMLよりJSONの方がいい場合とは?
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?