我在应用中使用codeigniter。有表格。在textarea元素中,我写了一些内容,包括
%Features%
然而,当我想通过$ this-> input-> post(key)回应这个时,我会得到像
�atures%
'%Fe'消失了。
在CI的主index.php文件中,我尝试var_dump($_POST)
,我看到上面的单词完全没问题。但是当我使用输入库(xss过滤打开)获取它时,我遇到了问题。
当XSS过滤关闭时,它最初显示正常。但是,如果我将它存储在数据库中并在下次显示,我会看到同样的问题(即使xss过滤已关闭)。
答案 0 :(得分:1)
%Fe
恰好看起来像一个URL编码的序列{{1}},代表字符254.它正在被编入Unicode“我不知道那个序列意味着什么”字形, 。
很明显,在提交时解码字段时,“XSS过滤器”过于热心。
当您从数据库输出结果时,很可能在此过程的某个时刻再次运行URL解码。检查数据库以确保正确表示实际字符串。
答案 1 :(得分:1)
首先:在将变量存储到db之前先转义变量。 %在SQL中具有特殊含义。
第二:%在URL中也有特殊含义,例如。 %20是%FE将映射到某个将由input()
解码的字符