选择安全分隔符以将列表数据保存到db

时间:2014-04-26 15:09:36

标签: python string separator

我需要将文件列表转换为字符串并将其保存到db 文件列表如:

[
  # [name, length]
  # name is in bytes
  ['111.txt', '1024'],
  ['english.txt', '2048'],
  ['some CJK words.log', '2048'],
  ....
]

注意:

  1. 所有文件名都是合法的。
  2. 文件名不是用户输入
  3. 现在,我使用:

    if fs:
        files = []
        file_names = fs[0]
        file_lengths = fs[1]
        for i in xrange(len(file_names)):
            files.append(file_names[i] + '\#' + file_lengths[i])
        files = '\n'.join(files)
    
        save_to_mysql(files)
    

    因为我认为以字节为单位的文件名不会有\n\#,但我不太确定。使用\#和{{1}是否安全在我的情况下?

1 个答案:

答案 0 :(得分:1)

对此的正确解决方法是使用不能出现在文本中的字符。

但如果这是不可能的,并且该字符确实出现在文本中,则必须以某种方式标记,即转义

已经有了解决方案:您可以使用C字符串语法或XML或JSON或YAML ...

但是如果你觉得特别懒,我有时会使用U + 0080字符,因为它没有在任何地方使用过。但请注意,如果将来你想要将字符串列表编码为列表中的元素......那么你就会遇到问题!此外,你必须检查输入字符串,以防一些恶意用户将这个字符U + 0080注入你的字符串并开始破坏。