如何使用PyYAML读取字符串"\'-alert(1)//"?
解决YAML含特殊转义字符串的读取错误问题
问题场景
YAML文件里有这么个字符串:
"\'-alert(1)//"
用Python代码读取时:
with open(file_path, 'r') as file: yaml_data = yaml.safe_load(file) # 试过unsafe_load也不行
直接报错:
found unknown escape character "'"
为啥会报错
YAML的双引号字符串只支持有限的转义字符(比如\"、\\、\n这类),\'根本不是合法的YAML转义序列,解析器识别不了,自然就报错了。
解决办法
办法1:改YAML文件里的字符串
没必要给单引号加转义,双引号包裹的字符串里单引号直接写就行,改成这样:
"'alert(1)//"
或者换成单引号包裹字符串(YAML单引号字符串里,只有内部的单引号需要写成两个连续的),写法如下:
'''alert(1)//'
办法2:读取前先处理文件内容
如果没法改YAML文件,就在读取后先把非法转义替换掉再解析:
with open(file_path, 'r') as file: # 把 "\'" 替换成 "'",消除非法转义 content = file.read().replace(r"\'", "'") yaml_data = yaml.safe_load(content)
内容的提问来源于stack exchange,提问作者ihnfsa
相关产品推荐
相关产品推荐

