> newtonsoft JSON'S TypeNameHandling.All
:安全含義
> Newtonsoft JSON的文檔強烈警告不要使用TypeNameHandling.All
的漏洞
TypeNameHandling.All
設置允許Newtonsoft JSON根據JSON有效負載中的元數據實例化類型。 儘管方便,但這會帶來重大的安全風險。 攻擊者可以製作惡意的json,迫使有害類型的避免化,從而導致任意代碼執行。
例如,良性的JSON有效負載可能看起來像:
TypeNameHandling.All
實例,並可能通過操縱
和<code class="language-json">{ "$type": "Car", "Maker": "Ford", "Model": "Explorer" }</code>
<code class="language-json">{ "$type": "System.CodeDom.Compiler.TempFileCollection", "BasePath": "%SYSTEMDRIVE%", "KeepFiles": "false", "TempDir": "%SYSTEMROOT%" }</code>
TempFileCollection
>BasePath
>
TempDir
>使用類型信息確保JSON避難所化的關鍵是使用自定義
實施自定義SerializationBinder
涉及以下步驟:
創建一個實現SerializationBinder
接口的類
實施類型驗證的方法。 這通常涉及檢查針對白名單或黑名單的類型。 SerializationBinder
>
IBindingSerializer
通過實施這些步驟,您可以安全地從外部來源進行JSON,同時防止潛在的有害類型實例化。 這種主動的方法大大降低了剝削的風險。 以上是Newtonsoft JSON的TypenameHandling是否有安全風險?的詳細內容。更多資訊請關注PHP中文網其他相關文章!