我有一个用于上传嵌入代码的文本区域。当我发布嵌入代码时,它不会发布完整代码。 这是我的嵌入代码
<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。
现在我得到了完整的网址!
是“联合”是任何保留字吗? 为什么会这样?
答案 0 :(得分: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();
?>
有效!
答案 1 :(得分:0)
您的输入可能会在XSS过滤器中被捕获。这正是XSS过滤器的设计目标;保护您的网站免受跨站点脚本攻击。请尝试删除要测试的xss_clean
规则,但请注意,以免将其投入生产。
我的建议是只通过HTTP发送视频ID(在您的表单中)。在此特定的dailymotion视频中,您可以找到ID:xt7dgo
。它实际上是<iframe>
标签中唯一重要的信息。
其余属性是自动播放,徽标(打开或关闭),hideInfo(打开或关闭),启动...等等。所有这些属性都可以在服务器上重新创建。使用服务器回显<iframe>
标记+提交的id +所有其他属性。
答案 2 :(得分:0)
就在line 607
2nd line
或_remove_evil_attributes
System/core/Security.php
xss_clean
函数中,该错误存在。 $evil_attributes = array('on\w*', 'style', 'xmlns', 'formaction');
正在调用它。
// All javascript event handlers (e.g. onload, onclick, onmouseover), style, and xmlns
我甚至不知道这是不是一个错误。他们基本上试图提供安全性
xss_clean
所以,我想你必须这么做。或者,您可以将“联合”更改为“辛迪加”(就像您现在所做的那样)并在{{1}}之后将其转换回联合。