Rumah > pembangunan bahagian belakang > C++ > Adakah menggunakan `typenameHandling.all` di Newtonsoft.json selamat untuk data yang tidak dipercayai?

Adakah menggunakan `typenameHandling.all` di Newtonsoft.json selamat untuk data yang tidak dipercayai?

Patricia Arquette
Lepaskan: 2025-01-31 16:26:09
asal
431 orang telah melayarinya

Newtonsoft.json's 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 dalam JSON yang masuk. Walau bagaimanapun, ini membentangkan kelemahan keselamatan yang ketara apabila mengendalikan data yang tidak dipercayai. $type

Is Using `TypeNameHandling.All` in Newtonsoft.Json Safe for Deserializing Untrusted Data?

Implikasi keselamatan

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; }
}
Salin selepas log masuk

Walaupun sifat
{
  "$type": "System.Diagnostics.Process",
  "Make": "Attack",
  "Model": "DeleteC:\ImportantFiles"
}
Salin selepas log masuk
dan

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

Mengurangkan risiko

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan