eval を使用せず、セキュリティを維持せずに「リラックスした」JSON を解析するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-31 00:11:30
オリジナル
652 人が閲覧しました

How can I parse

Eval に頼らずに「リラックスした」JSON を解析する

よりユーザーフレンドリーな JSON 解析エクスペリエンスを促進するために、開発者はしばしば次のような手段を講じます。悪名高い eval 関数に。ただし、この方法ではセキュリティの脆弱性に関する懸念が生じます。この記事では、安全性を損なうことなく「緩和された」JSON を解析するための代替アプローチを検討し、利便性とセキュリティ要件の両方を満たすソリューションを提供します。

問題:

標準JSON 解析メソッド JSON.parse は、正しい JSON 構文に厳密に従っており、キーを引用符で囲む必要があります。ただし、実際には、開発者はキーが引用符で囲まれていない「緩和された」構文の JSON データに遭遇することがよくあります。これにより、このようなデータを安全に解析することが困難になります。

解決策:

無差別にコードを実行する eval を使用する代わりに、より安全で同様に効果的な方法として、正規表現を使用して JSON データをサニタイズします。この手法には、引用符で囲まれていないキーを適切に引用符で囲まれた同等のキーに置き換えることが含まれており、JSON.parse によってデータを正常に解析できるようになります。

ステップバイステップのプロセス:

  1. JSON をサニタイズします:
    正規表現を使用して、引用符で囲まれていないキーの JSON データをスキャンします。引用符で囲まれていないキーごとに、引用符で囲まれた対応するキーに置き換えます。
  2. サニタイズされた JSON を評価します:
    データがサニタイズされたら、安全に解析するために JSON.parse に渡すことができます。

コード例:

次の「緩和された」JSON を考えてみましょう:

{muh: 2}
ログイン後にコピー

このデータを解析するにはサニタイズされたアプローチを使用する:

var badJson = "{muh: 2}";
var correctJson = badJson.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"": ');
var resultObject = JSON.parse(correctJson);
ログイン後にコピー

サニタイズ プロセスの後、correctJson 変数には有効な JSON が含まれます:

{"muh": 2}
ログイン後にコピー

これは JSON.parse によって安全に解析でき、結果として

結論:

このサニタイズ手法を採用することで、開発者は eval に頼ることなく、「緩和された」JSON データを安全に解析できます。このアプローチは、データの整合性と安全なプログラミング慣行の遵守の両方を保証する実用的なソリューションを提供します。

以上がeval を使用せず、セキュリティを維持せずに「リラックスした」JSON を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!