这是我唯一的选择,我不能通过这种方法使用会话变量或发布参数,所以只能使用查询字符串方式。

如何保护我的查询字符串,使用户无法使用它们?加密查询字符串的最佳方法是什么?

1个回答

将用户提供的值放入eval()调用中是一个可怕的想法,因为它本质上相当于一个远程代码执行漏洞。假设您的代码如下所示...

var data = eval(webRequest.Parameters["p"]);

现在想象一下我把它放到p参数中......

System.IO.File.Delete(@"c:\windows\system32\ntoskrnl.exe");

哎呀!我刚刚删除了你的内核。

再多的转义都不会在这里奏效——这是一个从根本上被打破的概念。

加密参数只会使事情复杂化。选择正确的方法,并使用语言设计的会话变量。

更新:为了清楚起见,我说的是一般意义上的 eval() 。如果您在 C# 中的数据控制器上使用 Eval 绑定方法,只要没有用户参数进入那里就可以了,否则它们会导致您的代码从数据库中转储任意值,甚至不需要 SQL注入.

其它你可能感兴趣的问题
上一篇我可以在我自己的系统中重复使用其他供应商的双因子令牌吗?(避免物理令牌膨胀) 下一篇是否在野外发现了任何利用 GPU 的病毒?缓解措施是什么?