gpt4 book ai didi

c# - 扩展类型安全以防止脏数据被用于需要 "clean"数据的函数

转载 作者:太空狗 更新时间:2023-10-29 20:02:06 25 4
gpt4 key购买 nike

<分区>

.NET 或其多种语言中的一种能否强制清理不受信任的数据...或防止在错误位置意外使用变量?

其中一个例子是当用户 POST 的数据和“原始”响应在 SQL 事务中使用时。这可能会导致从客户端脚本漏洞到整个服务器受到损害的任何事情。

另一个例子是我必须将数据传递给 COM 对象以进行进一步处理。

作为 C#、ASP.net 和 SQL 开发人员,我有哪些选择可以确保我的用户的脏数据在清理之前不会触及任何内部内容?我可以利用运行时(或编译器)的功能吗?

如果没有让语言实际强制执行它,也许我可以在我的传入变量中添加一个 _dirty 后缀。这是您推荐的最佳做法吗?

专业人士如何解决这个问题?

更新

这是我的概念方向

这是基于目前给出的答案(特别是 SteveCzetty 和 Erlend)的一些启发

例如:

public Interface ICleanForJavascript { bool IsCleanForJavascript(); }  

public Interface ICleanForXSS { bool IsCleanForJavascript(); }

public class DirtyData
{
string Name {get; set;}
}

public class CleanData
{
private CleanData() {}
string Name {get; private set;}


// Perhaps use casting to support the conversion from Dirty to Clean data
// Might use this in an option explicit DirtyData CleanData(object o); command
public static CleanData Validate(DirtyData d)
{
CleanData data = new CleanData();
if (ValidateString(d.Name))
{
data.Name = d.Name
}
else
{
throw new ValidationException();
}
return CleanData;
}
}

[RequiresCleanedDataAttribute(ICleanForJavascript )]
public void DoSomething(CleanData data)
{
//...
}

Attribute RequiresCleanedDataAttribute(object arrayOfCleanings[])
{
// do some reflection on the method signature and see if the object supports the required interfaces
}

有了上面的,那么:

DoSomething(new DirtyData()); // Compiler Error, or runtime error if Attribute validation fails
DoSomething(CleanData.Validate(new DirtyData())); // Compiles

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com