0

我有一个用于上传嵌入代码的文本区域。当我发布嵌入代码时,它没有发布完整代码。这是我的嵌入代码

<iframe frameborder="0" width="480" height="308" src="http://www.dailymotion.com/embed/video/xt7dgo?autoplay=0&logo=0&hideInfos=1&start=0&syndication=108944&foreground=%23F7FFFD&highlight=%23FFC300&background=%23171D1B"></iframe>

这是我得到这个的 php 代码。

public function embeded(){
    $this->form_validation->set_rules('video_heading', 'Video heading', 'required|trim|xss_clean');
    $this->form_validation->set_rules('embeded', 'Embeded code', 'required|trim|xss_clean');
    $this->load->model('videos');
    $error['error']="";
    if ($this->form_validation->run() == FALSE)
    {
        $error['error']= validation_errors();
        $this->load->view('sidebar');
        $this->load->view('addvideo', $error);
        $this->load->view('footer');
    }else{
        //<iframe width="420" height="315" src="http://www.youtube.com/embed/Niiyh3sxwYk" frameborder="0" allowfullscreen></iframe>
        $plink=$this->videos->processlink($this->input->post('embeded'));
        $info = array('heading'=>$this->input->post('video_heading'),
        'status'=>$this->input->post('status'),'video'=>$plink,
        'comment'=>$this->input->post('comment'),'category'=>$this->input->post('category'));   
        $this->load->model('videos');
        $obj= (object)$info;
        echo "opsted_link".str_replace("syndication","syndicate", $_POST['embeded']);
        if(isset($_POST['embeded']))
         {
              echo $_POST['embeded'];exit;
         }
        //$this->videos->addembededvideo($obj);
    }

}

当我使用它时,我得到部分像这样的 i 框架代码。

<iframe frameborder="0" width="480" height="308" src="http://www.dailymotion.com/embed/video/xt7dgo?autoplay=0&logo=0&hideInfos=1&start=0&syndicati></iframe>

我将 src 中的参数 syndication=108944 更改为 syndicator=108944。

现在我得到了完整的网址!

“联合”是任何保留字吗?为什么会这样?

4

3 回答 3

0

我做了这样的事情。

这是我的控制器中的方法:

function framex()
{
    $this->load->helper('form');
    if(isset($_POST['frame']))
    {
        echo $_POST['frame'];exit;
    }
    $this->load->view('deneme');
}

这是查看页面:

<?php
    echo form_open('deneme/framex');
?>

<textarea name="frame"></textarea>

<?php 
    echo form_submit('submit','Submit');
    echo form_close();
?>

有效!

于 2012-09-05T15:06:29.650 回答
0

您的输入有可能被 XSS 过滤器捕获。这正是 XSS 过滤器的设计目的;保护您的站点免受跨站点脚本攻击。尝试删除xss_clean规则进行测试,但请注意,不要将其投入生产。

我对您的建议是仅通过 HTTP(以您的形式)发送视频 ID。在这个特定的dailymotion视频中,您可以找到ID xt7dgo:。<iframe>它确实是标签中唯一重要的信息。

其余的属性是自动播放、标志(开或关)、隐藏信息(开或关)、开始...等。所有这些属性都可以在服务器上重新创建。使用服务器回显<iframe>标签 + 提交的 id + 所有其他属性。

于 2012-09-05T15:59:24.350 回答
0

它在这里,在函数中line 607或函数中,存在错误。正在调用它。2nd line_remove_evil_attributesSystem/core/Security.phpxss_clean

$evil_attributes = array('on\w*', 'style', 'xmlns', 'formaction');

我什至不知道这是否是一个错误。他们基本上是试图提供安全性

// All javascript event handlers (e.g. onload, onclick, onmouseover), style, and xmlns

所以,我猜你必须与它有关。或者,您可以将“syndication”更改为“syndicator”(就像您现在正在做的那样),然后再将其转换回xss_cleansyndication。

于 2012-09-05T17:38:28.180 回答