2017-11-28 6 views
0

私は自分のウェブサイトプロジェクトを利用して、ユーザーが投稿に対してコメントを付けることができます。たとえば、ユーザーがYouTubeの動画を投稿できるようにしたいと考えています。私はそれらをiframeに表示して、他の人がビデオの素敵なウィンドウを見たいと思っています。ユーザーがウェブサイトに投稿したコンテンツ

しかし、これは、ユーザーがすべてのHTMLタグとスクリプトを使用してウェブサイトを悪用できることを意味しますか?

がサイトを壊すこと
< a href="">< script>alert();< /script>">
のようなものを入れて...私はその周り

どのような方法がありますか?

ユーザーがタグを使用できないようにしたいのですが、リンクが投稿されたときにiframeにラップします。

私が考えている方法の1つは、iframeにラップされるURLのためだけに別の入力ウィンドウを置くことです。それはすべてを複雑にする。また、1つのコメントウィンドウを貼りたいと思います。

提案がありますか?

+0

の可能性のある重複した[HTML/PHPでXSSを防ぐ方法?](https://stackoverflow.com/questions/1996122/how-to-prevent- xss-with-html-php) –

+0

あなたはXSSを防ぐ方法を尋ねています。そのためには、サーバー上の入力をサニタイズする必要があります。上記のリンクは、PHPでこれを行う方法を示しています。[**この質問**](https://stackoverflow.com/questions/71328/what-are-the-best-practices-for-avoiding-xss-attacks -in-a-php-site)では、一般的なベストプラクティスのいくつかについて説明しています。 –

+3

HTMLを提供しないようにしてください。 YouTube URLのテキストを解析するだけです。次に、iframeを挿入し、提供されたURLを使用するreplaceを実行します。 – hungerstar

答えて

0
  1. ユーザーがHTMLを入力できないようにします。
  2. YouTube URLのユーザーコメントを解析します。
  3. URLをに置き換えて、提供されたURLを指定してください。

ここでは、動作する非常に単純なJavaScriptの例を示します。

https://jsfiddle.net/ntgs3ypt/

var comment = document.querySelector('textarea'); 
 
var output = document.querySelector('div'); 
 

 
var str = comment.value; 
 
var regex = /(https:\/\/www.youtube.com\/embed\/\w*)/; 
 

 
if (regex.test(str)) { 
 

 
    str = str.replace(regex, '<iframe width="560" height="315" src="$1" frameborder="0" allowfullscreen></iframe>'); 
 
    output.innerHTML = str; 
 

 
}
textarea { 
 
    width: 100%; 
 
}
<textarea name="comment">Lorem ipsum dolor https://www.youtube.com/embed/mr7FXvTSYpA lorem ipsum dolor</textarea> 
 

 
<div class="output"></div>

関連する問題