TypeNameHandling.All
: Risiko Keselamatan Ketika Deserializing Data Unstrusted harta TypeNameHandling
di NewtonSoft.Json menentukan bagaimana objek polimorfik deserialized. Menetapkannya ke TypeNameHandling.All
membolehkan NewtonSoft.json untuk memberi jenis jenis berdasarkan harta $type
Pelakon jahat boleh mengeksploitasi
dengan menyuntik harta yang menyatakan jenis yang berbahaya dalam JSON. Ini membolehkan mereka melaksanakan kod sewenang -wenang atau melakukan tindakan yang tidak diingini pada sistem sasaran. TypeNameHandling.All
$type
Pertimbangkan kelas yang tidak berbahaya:
Payload JSON yang berniat jahat boleh kelihatan seperti ini:
public class Vehicle { public string Make { get; set; } public string Model { get; set; } }
Walaupun sifat
{ "$type": "System.Diagnostics.Process", "Make": "Attack", "Model": "DeleteC:\ImportantFiles" }
adalah jinak, harta Make
memaksa penciptaan objek Model
, yang berpotensi memulakan proses berbahaya pada sistem. Ini memintas pemeriksaan jenis biasa dan membuka pintu kepada pelbagai serangan. $type
System.Diagnostics.Process
Untuk mengelakkan serangan sedemikian, elakkan menggunakan
apabila deserializing JSON dari sumber luaran dan tidak dipercayai. Sebaliknya, gunakan untuk melumpuhkan pengendalian nama jenis. Sebagai alternatif, melaksanakan Custom TypeNameHandling.All
untuk mengawal dengan teliti jenis mana yang dibenarkan semasa deserialization, dengan berkesan menyenaraikan jenis selamat. Ini memberikan pendekatan yang lebih halus dan selamat untuk mengendalikan deserialization polimorfik. TypeNameHandling.None
Atas ialah kandungan terperinci Adakah menggunakan `typenameHandling.all` di Newtonsoft.json selamat untuk data yang tidak dipercayai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!