CKeditor在提交某些html标记时返回403
我创建了一个页面,其中有两个输入textareas,并将CKeditor(版本4)添加到它们两个中。CKeditor在提交某些html标记时返回403
第一个编辑器工作正常,我已在config.js中设置config.allowedContent = true;
来停止剥离标签,如<script>
,并且所有内容都按预期工作。
我有另一个编辑器正下方,相同的设置,相同的设置,我只是改变了textarea字段的ID。它在我提交正常文本时起作用,但是一旦我添加了<script>
标记,例如,按下编辑器所在窗体的提交按钮似乎重新加载页面,不提交任何数据和萤火虫告诉我服务器返回403.
我试着隔离编辑器,添加个人配置。没有。第一个textarea就像一个魅力,第二个返回403如果文本有不安全标签在里面。我使用ckeditor helper来插入编辑器。按照您的猜测,使用CodeIgniter创建页面。
我在ckeditor文件夹中找到了一个config.js文件。
我使用的是常规窗体,没有什么奇怪的。它看起来像这样
<form action="http://domain.com/admin/articles/edit/47" method="post">
<div id="cke_ckeditor_en_container">
<textarea cols="75" rows="7" id="ckeditor_en" name="text_en" class="input-text is-col-text"><?php echo set_value('text_en', isset($text_en) ? htmlspecialchars_decode($text_en) : ''); ?></textarea>
<?php echo display_ckeditor($ckeditor_en); ?>
</div>
<input type="submit" value="submit" />
</form>
的形式有哪些是相同的,以变更后的ID和其他属性,以及一个复选框,没有什么相关的其他HTML编辑器的另一部分。
而且在我的控制器
public function edit(){
$this->load->helper('ckeditor');
$id = (int)$this->uri->segment(4);
if (empty($id)){
$this->session->set_flashdata('error', 'Empty ID!');
redirect('admin/articles');
}
$data = $this->articles_model->fetch_article($id);
$data['page_title'] = "Edit `" . $data['title'] . "`";
$data['form_url'] = "admin/articles/edit/" . $id;
$data['ckeditor'] = array(
'id' => 'ckeditor',
'path' => 'js/ckeditor');
$data['ckeditor_en'] = array(
'id' => 'ckeditor_en',
'path' => 'js/ckeditor');
$data['edit'] = true;
if($this->input->post('submit')){
$this->save_article("update",$id);
}
$this->load->view("admin/articles",$data);
}
private function save_article($type='insert', $id=0){
$this->load->library('form_validation');
$this->form_validation->set_rules('title','Title','trim|xss_clean|max_length[150]|min_length[1]');
$this->form_validation->set_rules('text','Text','trim');
$this->form_validation->set_rules('title_en','Title EN','trim|xss_clean|max_length[150]|min_length[1]');
$this->form_validation->set_rules('text_en','Text EN','trim');
$this->form_validation->set_rules('top_menu','Show in top menu','trim|xss_clean|max_length[1]');
if ($this->form_validation->run() === FALSE)
{
return FALSE;
}
// make sure we only pass in the fields we want
$data = array();
$data['title'] = $this->input->post('title');
$data['text'] = htmlspecialchars($this->input->post('text'));
$data['title_en'] = $this->input->post('title_en');
$data['text_en'] = htmlspecialchars($this->input->post('text_en'));
$data['url'] = $this->toAscii($this->input->post('title'));
$data['url_en'] = $this->toAscii($this->input->post('title_en'));
$data['top_menu'] = $this->input->post('top_menu');
if($type == "insert"){
$data['time'] = date("YmdHis");
}
if ($type == 'insert'){
if($this->articles_model->insert($data)){
$this->session->set_flashdata('success', 'Article added successfully!');
}else{
$this->session->set_flashdata('error', 'An error occured!');
}
}else if ($type == 'update'){
if($this->articles_model->update($id, $data)){
$this->session->set_flashdata('success', 'Article `' . $data['title'] . '` edited successfully!');
}else{
$this->session->set_flashdata('error', 'An error ecc!');
}
}
redirect("admin/articles");
}
安全,或unsafeness得到这个,确切的说,我的代码是不相关的
编辑 添加config.js
的CKEditor的。
CKEDITOR.editorConfig = function(config) {
config.filebrowserBrowseUrl = '/js/kcfinder/browse.php?type=files';
config.filebrowserImageBrowseUrl = '/js/kcfinder/browse.php?type=images';
config.filebrowserFlashBrowseUrl = '/js/kcfinder/browse.php?type=flash';
config.filebrowserUploadUrl = '/js/kcfinder/upload.php?type=files';
config.filebrowserImageUploadUrl = '/js/kcfinder/upload.php?type=images';
config.filebrowserFlashUploadUrl = '/js/kcfinder/upload.php?type=flash';
config.removeButtons = 'Underline,Subscript,Superscript';
config.allowedContent = true;
// Se the most common block elements.
config.format_tags = 'p;h1;h2;h3;pre';
// Make dialogs simpler.
config.removeDialogTabs = 'image:advanced;link:advanced';
};
我难倒和stupified,我做什么了没有想法。这似乎是一个输入已被诅咒。
任何帮助表示感谢,谢谢。
据我所知,你试图添加一些东西到你的第二个textarea。 CKEditor删除一些“不安全”的标签。我不会很安全,但是这可以帮助您:
config.extraAllowedContent = '*{*}';
您将添加到您的config.js中。这段代码可以让你添加任何你想要的东西。 CKEditor不会删除“不安全”的标签。
这将是你的mod_security规则的结果。根据它们的严格程度,它们可以帮助更好地保护脚本免于通过漏洞攻击,通常是通过POST进行攻击的漏洞。
你能发布所有相关的控制器和视图代码吗?你是否在textareas中使用'ckeditor_en'? – stormdrain
身份证是唯一的,我不认为它甚至可以重复使用。我会在一秒钟后发布代码。 – Pankucins
所以要清楚:第一个编辑器可以正确使用不允许的文本(例如'