在ASP.NET中使用查询字符串的最佳实践?

Kha*_*han 8 asp.net query-string

在ASP.NET中使用QueryString时,我一直在寻找一些最佳实践指南,但实际上并没有找到.

我找到了一篇有用的优化文章:http://dotnetperls.com/querystring

但我更感兴趣的是回答以下问题:

  • 案例规则?全是小写?Pascal案例?骆驼香烟盒?
    • 我个人的偏好都是小写的,但一致性是最重要的.
  • 避免参数名称中的特殊字符?
  • 出于安全目的,是否应对参数和值进行模糊处理?

等等...

任何更多的指南将不胜感激!

slu*_*ter 10

查询字符串中的任何内容都是最终用户可查看和更改的.这意味着他们有可能更改它以查看或访问他们不应该访问的数据,或者影响您的网站/应用的行为.所以不言而喻,您对查询字符串一无所知,并在使用之前检查所有内容.当你选择了它,不检查的事情是用它(这可能是一个无限列表),而不是检查的事情是正确的.如果您的某个检查失败,那么您应该丢弃查询字符串数据,或将其视为可疑.如果您对查询字符串中的数据进行了加密或编码,如果用户对其进行混淆并且您盲目信任它,即使用户的更改由于编码而无意义,它仍然会产生意外的副作用.

我将敏感数据存储在查询字符串中的一种方法是不这样做; 相反,我将存储敏感数据服务器端(在会话,缓存或数据库中的表),然后我将在查询字符串中有一个随机生成的密钥(通常是GUID)来识别它,所以URL会看起来像这样:

http://myurl.com/myPage.aspx?secretKey=73FA4A5A85A44C75ABB5E323569628D3
Run Code Online (Sandbox Code Playgroud)

强行使用GUID相当困难,并且GUID冲突的可能性极小,因此如果最终用户使用查询字符串混乱,那么它们最终得不到任何结果.

当我需要存储很多东西并且查询字符串开始变得太长时,这种方法也很有效 - 需要跟踪的数据可以保存在一个对象中,然后存储在Session或Cache中,再次使用GUID作为它的关键.