2011-03-21 97 views
0

我在应用程序中使用codeigniter。有一种形式。在textarea元素,我写的东西,包括CodeIgniter 2.0输入库字符问题

%Features% 

然而,当我想通过这 - $>输入 - >(标号)来呼应这一点,我得到的东西像 �atures%

的“% Fe'消失了。

在主要的CI的index.php文件中,我试过var_dump($_POST),我看到上面的单词完全没问题。但是当我用输入库获取它时(xss过滤已开启),我得到了问题。

当XSS过滤关闭时,它最初看起来没问题。但是,如果我将其存储在数据库中并在下次显示时出现同样的问题(即使xss过滤关闭)。

回答

1

%Fe恰好看起来像一个URL编码的序列%FE,代表字符254。它被用于Unicode“我不知道那个序列意味着什么”字形, 。

很明显,在解码提交字段时,“XSS过滤器”过于热心了。

当您从数据库输出结果时,很有可能在过程的某个点再次运行URL解码。检查数据库以确保实际的字符串正确表示。

+0

嗨,我刚刚发现是什么问题。这是form_validation库的问题。 xss_clean规则适用于该字段。当我删除它工作正常。这意味着如果全局启用了xss_clean(在config.php中),或者如果在表单验证中运行了xss_clean过滤器,则会导致该问题。到目前为止,唯一的解决方案是禁用它:(还有其他想法吗? – HungryCoder 2011-03-22 01:34:17

1

第一:在将变量存储到数据库之前将其转义。 %在SQL中有特殊含义。

第二:%在URL中也有特殊的含义,例如。 %20是%FE将映射到一些字符将被解码的输入()

+0

CI本身在数据存储到数据库之前就转义了这个值。 – HungryCoder 2011-03-22 01:26:31

+1

@HungryCoder,不对,取决于程序员如何更新/插入它们。 – Jakub 2011-03-23 18:41:13

+0

@jakub,谢谢为您的输入。我告诉我的情况,因为我使用ActiveRecord! – HungryCoder 2011-03-24 04:06:37