Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在cookie中存储xml数据_C#_Asp.net_Serialization_Cookies - Fatal编程技术网

C# 在cookie中存储xml数据

C# 在cookie中存储xml数据,c#,asp.net,serialization,cookies,C#,Asp.net,Serialization,Cookies,我试图将xml序列化对象存储在cookie中,但出现如下错误: A potentially dangerous Request.Cookies value was detected from the client (KundeContextCookie="<?xml version="1.0" ...") 我从类似的案例中了解到问题所在,当您试图在表单输入字段中存储类似javascript代码的内容时 这里最好的做法是什么?是否有一种类似于我描述的表单问题的方法来消除asp.net框架中

我试图将xml序列化对象存储在cookie中,但出现如下错误:

A potentially dangerous Request.Cookies value was detected from the client (KundeContextCookie="<?xml version="1.0" ...")
我从类似的案例中了解到问题所在,当您试图在表单输入字段中存储类似javascript代码的内容时

这里最好的做法是什么?是否有一种类似于我描述的表单问题的方法来消除asp.net框架中的此警告,或者应该改为JSON序列化,或者应该对其进行二进制序列化?在cookie中存储序列化数据时的常见做法是什么

编辑: 谢谢你的反馈。我希望在cookie中存储比ID更多的数据的原因是,我真正需要的对象需要大约2秒钟才能从我无法控制的服务中检索。我制作了一个轻量级对象“Kundocontext”来保存完整对象中的一些属性,但这些属性90%的时间都在使用。这样,我只需要在10%的页面上调用慢速服务。如果我只存储Id,我仍然需要在几乎所有页面上调用该服务


我可以分别存储所有字符串和整数,但该对象还有其他轻量级对象,如“contactinformation”和“address”,手动存储它们的每个属性会很麻烦。

我不会在cookie中存储XML格式的数据-对于所有头,包括曲奇选择不太详细的编码策略,例如分隔符,例如a | b | c或单独的cookie值。分隔编码使解码值特别容易和快速


您看到的错误是ASP.NET抱怨标头看起来像XSS攻击。

我不会在cookie中以XML存储数据-对于初学者,cookie大小有一个限制,包括cookie在内的所有标头的大小都是4K。选择不太详细的编码策略,例如分隔符,例如a | b | c或单独的cookie值。分隔编码使解码值特别容易和快速


您看到的错误是ASP.NET抱怨头看起来像XSS攻击。

将序列化数据存储在cookie中是一个非常糟糕的主意。由于用户可以完全控制cookie数据,因此他们很容易使用此机制向您提供恶意数据。换句话说:反序列化代码中的任何弱点都会立即被利用,或者至少会使某些东西崩溃

取而代之的是,在cookie中只保留最简单的标识符,这种标识符的格式可以很容易地进行验证,例如GUID。然后,将序列化的数据服务器端存储在数据库、文件系统上的XML文件或其他任何文件中,并使用该标识符检索它

编辑:另外,在这个场景中,确保您的标识符是随机的,这样用户就不可能猜测对方的标识符,而只需稍微更改一下自己的标识符就可以模拟对方。同样,guid或ASP.NET会话标识符也可以很好地用于此目的


问题所有者在场景澄清后进行第二次编辑:在这种情况下,为什么要使用您自己的cookie?如果在会话状态会话对象中保留对原始对象或轻量级对象的引用,ASP.NET将以非常高效的方式为您处理所有实现细节。

将序列化数据存储在cookie中是一个非常糟糕的主意。由于用户可以完全控制cookie数据,因此他们很容易使用此机制向您提供恶意数据。换句话说:反序列化代码中的任何弱点都会立即被利用,或者至少会使某些东西崩溃

取而代之的是,在cookie中只保留最简单的标识符,这种标识符的格式可以很容易地进行验证,例如GUID。然后,将序列化的数据服务器端存储在数据库、文件系统上的XML文件或其他任何文件中,并使用该标识符检索它

编辑:另外,在这个场景中,确保您的标识符是随机的,这样用户就不可能猜测对方的标识符,而只需稍微更改一下自己的标识符就可以模拟对方。同样,guid或ASP.NET会话标识符也可以很好地用于此目的

问题所有者在场景澄清后进行第二次编辑:在这种情况下,为什么要使用您自己的cookie?如果在会话状态会话对象中保留对原始对象或轻量级对象的引用,ASP.NET将以非常高效的方式为您处理所有实现细节。

查看。也许您希望在ViewState中跨回发持久化数据,而不是使用cookie。否则,您可能应该将XML存储在服务器上,并将该数据的唯一标识符存储在cookie中。也许您希望在ViewState中跨回发持久化数据,而不是使用cookie。否则,您可能应该将XML存储在服务器上,并为其提供一个唯一标识符 取而代之的是cookie中的数据。

您可能会考虑使用它来存储值。您可以将其配置为使用cookie存储会话id。这也更安全,因为该值在用户端既不可见也不可更改

另一种选择是使用分布式缓存机制来存储值。我当前最喜欢的是。

您可以研究使用来存储值。您可以将其配置为使用cookie存储会话id。这也更安全,因为该值在用户端既不可见也不可更改


另一种选择是使用分布式缓存机制来存储值。我目前最喜欢的是。

好的观点,在接受答案之前我会让问题再开放一点:好的观点,在接受答案之前我会让问题再开放一点:也是好的观点,但是我在这里不使用viewstate的原因是因为有很多新的请求是非回发的,所以流不包含在单个页面上。我实际上是在一个现有的解决方案上实现的,所以我不想更改其他页面。这也是一个很好的观点,但我在这里不使用viewstate的原因是因为有很多新的非回发请求,所以流不包含在单个页面上。我实际上是在现有的解决方案上实现的,所以我不想更改其他页面。是的,我听到了-我只是在我的问题中添加了一个编辑。我需要“所有这些数据”来加快速度。标识符可以给我整个对象,但这样做的过程太慢了,我无能为力,因为它在现有的服务中,我不能篡改。是的,我听到了-我只是在我的问题中添加了一个编辑。我需要“所有这些数据”来加快速度。标识符可以给我整个对象,但是这样做的过程太慢了,而且我对此无能为力,因为它在现有的服务中,我不能篡改。