4

免责声明:我知道在 99% 的情况下,您不应该“序列化”连接字符串中的数据。

你们在众所周知的情况下使用什么字符:

string str = userId +"-"+ userName;

在大多数情况下,我已经退回到 | (管道)但是,在某些情况下,用户甚至会输入。像☼(ALT+9999)这样的“不可输入”字符呢?

4

2 回答 2

8

这取决于太多因素,无法给出具体答案。

首先,你为什么要这样做?如果您觉得需要以这种方式存储userIduserName组合它们,请考虑替代方法,例如 CSV 样式引用或类似方法。

其次,在正常情况下,只应使用不属于字符串的分隔符。如果 userId 只是一个数字,那么“-”就可以了……但是如果这个数字可能是负数怎么办?

第三,这取决于你打算用字符串做什么。如果它只是用于日志记录或调试器或其他形式的人类消费,那么您可以放松一下,只需选择一个看起来合适的分隔符。如果您打算像这样存储数据,请使用分隔符来确保您以后可以正确提取数据,而不管userIdor的值如何userName。如果您可以摆脱它,请使用\0例如。如果任一值来自不受信任的来源(即 Internet),则确保分隔符不能用作任一字符串中的字符。通常,您会限制每个包含的字符 - 例如,数字userId和字母,数字和一些标点符号userName

于 2012-04-22T06:53:12.733 回答
6

如果是用于数据存储和检索,则无法保证用户找不到将分隔符注入字符串的方法。安全的做法是以某种方式预处理输入:

  • 让我们-成为特殊角色
  • 如果-在输入中遇到 a,请将其替换为-0.
  • 用作--分隔符

所以userid = "alpha-dog"anduserName = "papa--0bear"将被翻译成

alpha-0dog--papa-0-00bear

重要的是您的方案必须是完全可撤销的,并且用户不应该能够破坏它,无论他们输入什么。

本质上,这是一个非常原始的消毒版本。

于 2012-04-22T07:00:39.273 回答