因为我不知道在哪里搜索这个 - 也许这里有人可以帮助我。
我需要用户在textarea中添加这样的内容:
<script> var foo bar; </script>
<script type="text/javascript" src="http://foobar.de/mylist.js"></script>
但Codeigniter似乎有一个内置的代码注入保护 - 所以我提交后得到的是:
[removed] var foo bar; [removed]
[removed][removed]
我怎么能改变这个?我知道这是不安全的,但我需要解析URL。
作为替代方案,我需要一个jQuery函数来解析这个URL ....我对regEx不是很熟悉。 ^^
我的PHP解析器看起来像这样(从某处复制^^):
$reg_exUrl = '/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i';
if (preg_match($reg_exUrl, $_POST['code'], $matches)) {
$jsUrl = $matches[0];
}
答案 0 :(得分:0)
@ Gavin的评论很好。可能是您没有看到它,因为脚本标记会使其不可见(如果您尝试echo
或print
结果)。
function index()
{
echo form_open();
echo form_textarea('test');
echo form_submit('', 'Submit');
echo form_close();
if($this->input->post())
{
echo "<pre>";
$textified = str_replace('<', '<', $this->input->post('test', false));
echo "textified string = $textified <br><br>";
// find URL. Regex from http://stackoverflow.com/a/2721152/183254
preg_match_all('/\b(?:(?:https?):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $textified, $result, PREG_PATTERN_ORDER);
echo "URL in textified string: " . $result[0][0];
}
}
编辑:
以上情况似乎取决于$config['global_xss_filtering'] = FALSE;
的设定。当$config['global_xss_filtering'] = TRUE;
时,无论如何都会过滤所有字段,并且没有办法让选择字段不通过过滤器。因此,如果将TRUE
设置为$this->input->post()
,则上述情况将不起作用。
false
的默认值是XSS过滤为false,因此上例中的$config['global_xss_filtering'] = FALSE;
也是多余的。
这似乎唯一的方法就是离开$this->input->post('filtered_item', true);
并在希望 XSS过滤的所有输入字段上设置$this->input->post('unfiltered_item');
并仅使用{{1对于需要脚本标记的字段。