如何区分String中的两个字符串?(如何防止纯文本注入)

Jee*_*oon 0 java string code-injection

假设我有两个随机生成的字符串.

我可以做什么来生成一个生成两个字符串的String,同时能够拆分它们以获得原始的两个字符串供以后使用?

例如,我有"[aweiroj\3aoierjvg0_3409"和"4093 w_/e9".如何将这两个单词附加到一个变量中,同时能够将它们拆分为原始的两个字符串?

我的问题是,我似乎找不到.spit()的正则表达式,因为这两个字符串可以有任何字符(alpabet,整数,\,/,空格......).

编辑

我只是想到了一个可以使用它的真实案例.有时,通过网络(HTTP)发送纯文本比xml或json更好.宽带速度慢的服务器 - 使用xml或json,宽带慢速的快速服务器 - 使用纯文本.以下答案可能会阻止纯文本注入.但是,这些方法没有基准测试或测试,我可能会在实际使用它们之前测试这些方法.

T.J*_*der 9

简短的回答是:不要这样做.使用数组或具有两个数据成员的类,但将字符串组合成一个字符串可能是一个坏主意.

但是如果你有一些真正模糊的用例,你可以:

  1. 创建一个足够独特的分隔符,如"<<Jee Seok Yoon's Delimiter>>".

    final static String DELIM = "<<Jee Seok Yoon's Unique Delimiter>>";
    String a = /*...*/;
    String b = /*...*/;
    String combined = a + DELIM + b;
    
    int breakAt = combined.indexOf(DELIM);
    String a1 = combined.substring(0, breakAt);
    String b1 = combined.substring(breakAt + DELIM.length());
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果存在于字符串中,则有一个更简单的分隔符.

  3. 记住第一个字符串的长度,并将其存储在统一字符串中,后跟"end of length"分隔符.

    String a = /*...*/;
    String b = /*...*/;
    String combined = String.valueOf(a.length()) + "|" + a + b;
    
    int breakAt = combined.indexOf("|");
    int len = Integer.parseInt(combined.substring(0, breakAt), 10);
    String a1 = combined.substring(breakAt + 1, len);
    String b1 = combined.substring(breakAt + 1 + len);
    
    Run Code Online (Sandbox Code Playgroud)

(两个代码示例都是完全脱离袖口并且未经测试.)

  • #3似乎是最好的选择. (2认同)