Dalam bidang derivatifisasi JSON, typenameHandling bermain memainkan peranan penting dalam menentukan cara menjelaskan data JSON luaran. Walaupun ia secara automatik boleh membuat jenis contoh tertentu, ia perlu berhati -hati apabila berurusan dengan data JSON dari sumber sumber yang dipercayai.
tetapan lalai typenamehandling.all kelihatan mudah, tetapi ia menyembunyikan bahaya. Apabila data JSON mengandungi metadata jenis, JSON.NET akan mencuba jenis yang ditentukan dalam jenis yang ditentukan. Walaupun ini kelihatan tidak berbahaya, kod berniat jahat boleh menggunakan fungsi ini untuk membuat objek berbahaya dalam aplikasi anda.
Pertimbangkan contoh ini: Tunjukkan data JSON objek kereta:
Menggunakan typenameHandling.all, json.net akan membuat contoh kereta baru dan mengisi atributnya dengan sewajarnya. Walau bagaimanapun, penyerang boleh mengubahsuai struktur JSON untuk mewakili sistem.codedom.compiler.tempfileCollection:
<code>{ "$type": "Car", "Maker": "Ford", "Model": "Explorer" }</code>
JSON yang berniat jahat ini akan mengarahkan JSON.net untuk meniru objek TempFileCollect, yang akan memadam fail pada sistem mangsa tanpa persetujuan mangsa yang tidak diketahui atau tidak diingini.
<code>{ "$type": "System.CodeDom.Compiler.TempFileCollection", "BasePath": "%SYSTEMDRIVE", "KeepFiles": "False", "TempDir": "%SYSTEMROOT%" }</code>
Untuk mengurangkan kelemahan ini, apabila menggunakan typenameHandling.all kembali Serialization JSON, pastikan anda menggunakan siri serialization custom. Pengikat ini boleh melakukan pengesahan dan pemeriksaan yang ketat untuk memastikan jenis yang dihantar sebelum instantiasi selamat dan dibenarkan. Dengan mengambil langkah -langkah pencegahan ini, anda boleh menghalang JSON yang berniat jahat daripada merosakkan integriti permohonan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh deserialize JSON dengan typenameHandling di C# untuk mengelakkan risiko keselamatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!