这是我唯一的选择,我不能通过这种方法使用会话变量或发布参数,所以只能使用查询字符串方式。
如何保护我的查询字符串,使用户无法使用它们?加密查询字符串的最佳方法是什么?
将用户提供的值放入eval()调用中是一个可怕的想法,因为它本质上相当于一个远程代码执行漏洞。假设您的代码如下所示...
var data = eval(webRequest.Parameters["p"]);
现在想象一下我把它放到p参数中......
System.IO.File.Delete(@"c:\windows\system32\ntoskrnl.exe");
哎呀!我刚刚删除了你的内核。
再多的转义都不会在这里奏效——这是一个从根本上被打破的概念。
加密参数只会使事情复杂化。选择正确的方法,并使用语言设计的会话变量。
更新:为了清楚起见,我说的是一般意义上的 eval() 。如果您在 C# 中的数据控制器上使用 Eval 绑定方法,只要没有用户参数进入那里就可以了,否则它们会导致您的代码从数据库中转储任意值,甚至不需要 SQL注入.