0

私のindex.htmlページ内で、ユーザーから次のような埋め込みリンクを取得しています。

<iframe width='560' height='315' src='http://www.youtube.com/embed/GasAmUfvXJs'     frameborder='0' allowfullscreen></iframe>

このコードは PHP スクリプトに渡され、変数に格納されて検証が実行されます。検証が成功した後、PHP スクリプト内で変数をエコーアウトしようとしました。しかし、それは正しく表示されません。

PHPスクリプトは次のとおりです。

<?php

if(isset($_POST['embed']) && isset($_POST['date'])){

$embed = $_POST['embed'];
$date = $_POST['date'];

if(!empty($embed) && !empty($date)){

    echo "OK - VIDEO";
    $final = $embed;
    echo "$final";

}else{
    $final = "Try again - not empty";
    echo "$final";
}

}else{

echo "try again - not set";

} 

?>
4

1 に答える 1

1

html をエコーアウトすると、ブラウザーによってレンダリングされます。html のソースをエコーアウトしたい場合は、次を使用します: htmlentites()

echo htmlentites($final);

それがあなたの後のものではない場合は、説明してください:But it does not display it correctly.

また、ユーザーが入力した html を出力しないでください。または、スクリプトが設計上 XSS に開かれていることを確認してください。コードからビデオの youtube ID だけを取り出して、そこから独自の埋め込みコードを作成する必要はありませ!empty($embed)

これを行う方法は次のとおりです。

<?php 
if($_SERVER['REQUEST_METHOD']=='POST'){
    if(!empty($_POST['embed']) && !empty($_POST['date'])){

        if(preg_match('#http://www.youtube.com/embed/([a-zA-Z0-9_-]+)\"#',$_POST['embed'],$match)==true){

            $embed = <<<EMBEDCODE
<iframe width="640" height="360"
        src="http://www.youtube.com/embed/{$match[1]}?feature=player_embedded"
        frameborder="0" allowfullscreen>
</iframe>
EMBEDCODE;

        }else{
            $embed = "Not a real youtube embedcode! Try Again";
        }

    }else{
        $embed = "Enter youtube embedcode.";
    }
}
?>

<h1>Youtube Yada</h1>
<form method="POST" action="">
  <p>Embedcode:<textarea rows="9" name="embed" cols="44"></textarea></p>
  <p>Date:<input type="text" name="date" value="<?php echo date("F j, Y, g:i a");?>" size="20"></p>
  <p><input type="submit" value="Submit" name="B1"></p>
</form>

<?php echo(isset($embed)?$embed:null);?>

テスト済み:

<iframe width="560" height="315" src="http://www.youtube.com/embed/GasAmUfvXJs" frameborder="0" allowfullscreen></iframe>
于 2012-05-25T13:40:15.563 に答える