ASP.NET 不良做法:存储在会话中的不可序列化对象
ASP.NET Bad Practices: Non-Serializable Object Stored in Session
我有这样的代码
Session["key"] = "value";
但是根据 Fortify SCA,它被认为是一种不好的做法,原因是 "Non-Serializable Object Stored in Session"。
截图如下:
解决这个问题的最佳方法是什么?
如何使字符串 "value" 可序列化?
我认为这是误报。
In order for the session to be serialized correctly, all objects the application stores as session attributes must declare the [Serializable]
attribute. Additionally, if the object requires custom serialization methods, it must also implement the ISerializable
interface.
由于string
没有实现ISerializable
,所以不会通过检查。
不要相信它是误报。最好为此做点什么。我从 Fortify 得到了同样的报告。为了修复它,当我尝试设置会话变量时,我首先 运行 通过一个我知道已序列化的对象的字符串。 class 看起来像这样:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace PMPM.Helpers
{
[Serializable]
public class SessionHelper
{
public string SerializedString
{
get
{
return serializedStr;
}
set
{
serializedStr = value;
}
}
private string serializedStr;
public SessionHelper(string stringToSerialize)
{
serializedStr = stringToSerialize;
}
}
}
那么class可以这样使用:
Helpers.SessionHelper sessionHelper = new Helpers.SessionHelper("Welcome :" + " " + ds.Rows[0]["PortalWelcome"].ToString());
Session["UserInput"] = sessionHelper.SerializedString;
这将确保对象被序列化并满足 Fortify。
我有这样的代码
Session["key"] = "value";
但是根据 Fortify SCA,它被认为是一种不好的做法,原因是 "Non-Serializable Object Stored in Session"。
截图如下:
解决这个问题的最佳方法是什么? 如何使字符串 "value" 可序列化?
我认为这是误报。
In order for the session to be serialized correctly, all objects the application stores as session attributes must declare the
[Serializable]
attribute. Additionally, if the object requires custom serialization methods, it must also implement theISerializable
interface.
由于string
没有实现ISerializable
,所以不会通过检查。
不要相信它是误报。最好为此做点什么。我从 Fortify 得到了同样的报告。为了修复它,当我尝试设置会话变量时,我首先 运行 通过一个我知道已序列化的对象的字符串。 class 看起来像这样:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace PMPM.Helpers
{
[Serializable]
public class SessionHelper
{
public string SerializedString
{
get
{
return serializedStr;
}
set
{
serializedStr = value;
}
}
private string serializedStr;
public SessionHelper(string stringToSerialize)
{
serializedStr = stringToSerialize;
}
}
}
那么class可以这样使用:
Helpers.SessionHelper sessionHelper = new Helpers.SessionHelper("Welcome :" + " " + ds.Rows[0]["PortalWelcome"].ToString());
Session["UserInput"] = sessionHelper.SerializedString;
这将确保对象被序列化并满足 Fortify。