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 に変更しました。

今、私は完全なURLを取得します!

「シンジケーション」は予約語ですか? なぜこれが起こるのですか?

4

3 に答える 3

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

だから、私はあなたがそれをしなければならないと思います。または、「シンジケート」を「シンジケータ」に変更し (現在行っているように)、後でxss_cleanシンジケーションに戻すこともできます。

于 2012-09-05T17:38:28.180 に答える
0

入力が XSS フィルターに引っかかっている可能性があります。これは、まさに XSS フィルターが行うように設計されていることです。クロスサイト スクリプティング攻撃からサイトを保護します。xss_cleanテストするルールを削除してみてください。ただし、これを本番環境に置かないように注意してください。

あなたへの私の提案は、ビデオ ID のみを HTTP 経由で (フォームで) 送信することです。この特定の Dailymotion ビデオでは、ID: を見つけることができますxt7dgo<iframe>これは、タグ内の唯一の重要な情報です。

残りの属性は、自動再生、ロゴ (オンまたはオフ)、hideInfo (オンまたはオフ)、開始などです。これらの属性はすべて、サーバー上で再作成できます。<iframe>サーバーを使用して、タグ + 送信された ID + 他のすべての属性をエコーアウトします。

于 2012-09-05T15:59:24.350 に答える
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 に答える