我正在尝试将一个xml序列化对象存储在cookie中,但是我收到如下错误:
A potentially dangerous Request.Cookies value was detected from the client (KundeContextCookie="当您尝试在表单输入字段中存储看起来像javascript代码的内容时,我从类似的情况中了解问题.
这里的最佳做法是什么?是否有一种方法(比如我描述的形式问题)从asp.net框架中抑制此警告,或者我应该将JSON序列化,还是应该二进制序列化?将序列化数据存储在cookie中时的常见做法是什么?
编辑:感谢您的反馈.我想在cookie中存储比ID更多的数据的原因是因为我真正需要的对象需要大约2秒才能从我无法控制的服务中进行检索.我创建了一个轻量级对象'KundeContext'来保存完整对象中的一些属性,但这些属性在90%的时间都被使用.这样我只需要在10%的页面上调用慢速服务.如果我只存储了Id,我仍然需要在几乎所有页面上调用该服务.
我可以单独存储所有字符串和整数,但该对象具有其他轻量级对象,如"contactinformation"和"address",这些对象的每个属性都需要手动存储.
1> mdb..:将序列化数据存储在cookie中是一个非常非常糟糕的主意.由于用户可以完全控制cookie数据,因此他们很容易使用此机制来提供恶意数据.换句话说:反序列化代码中的任何弱点都会立即被利用(或者至少是崩溃的方式).
相反,只能在cookie中保留最简单的标识符,其格式可以轻松验证(例如,GUID).然后,存储序列化数据服务器端(在数据库中,文件系统上的XML文件或其他)并使用该标识符检索它.
编辑:此外,在这种情况下,请确保您的标识符足够随机,以使用户猜测彼此的标识符是不可行的,并通过简单地更改自己的标识符来模仿彼此.同样,GUID(或ASP.NET会话标识符)可以很好地实现此目的.
问题所有者在方案澄清后进行第二次编辑:在这种情况下,为什么要使用自己的cookie?如果在会话状态(Session对象)中保留对原始对象或轻量级对象的引用,ASP.NET将以非常有效的方式为您处理所有实现细节.
弱点都会立即被利用(或者至少是崩溃的方式).