2013-04-01 13 views
6

次のコードは安全ですか?このjqueryコードは安全ですか?

$iframe = $('<iframe id="iframe" src="' + $(this).attr('rel') + '" name="iframe">'); 
$area = $("#ajax-area"); 
$area.empty().append($iframe); 

  1. $(this)リンクがクリックされました。
  2. attr('rel')はiframeのsrcを保持し、relはPHPによって作成されます(ここにはユーザー入力はありません)。
  3. $iframeにはアップロードするフォームがあります。

この場合、iframeのsrcは変数であるため、悪意のあるユーザーが何らかの形で「rel」属性を編集して、必要なiframeを開くことが懸念されます。これは可能ですか?あなたの貴重な答えを

EDIT

感謝。

basePathは、開発者が選択したことに一定である
App::basePath . '/some/path/to/my/folder'; 

PHPはRELを移入するには、次のように使用しています。

あなたの提案どおりに、私のjqueryをより適切な方法で再設計します。

+1

と明らかシナリオがありますHTMLで意味を持ち、エスケープする必要があります。実際に 'src'属性を設定するには' attr() 'を使うべきです。 –

答えて

3

理論的には、rel属性がサーバー定数に基づいている場合は、MiTMなど、制御できないセキュリティ上の問題は発生しません。

しかし、あなたは常にこれらのもので安全な側にいるべきです。そして、jQueryは、コンストラクタの2番目の引数として渡されるタグの属性を可能にすることにより、その安全性を提供します: `$(この).ATTR(「相対」)は`その文字が含まれている場合

$iframe = $('<iframe />', { 
    id: "iframe", 
    src=: $(this).attr('rel'), 
    name: "iframe" 
}); 
+0

質問を編集しました。編集をご覧ください。 – Shaokan

+0

@Shaokanあなたはすでに 'rel'はユーザーの入力に基づいていないと言っています:) –

+0

ええ、それはちょうど確かでした:)とにかくおかげで感謝します。 – Shaokan

1

攻撃者がリンクのrel属性に到達できない限り、安全でなければなりません。

しかし、コードが安全であるかどうかは、実行する環境を詳細に見ていなくては言い難いです。別のボタンから「安全な」コードにアクセスして、rel属性が無効になっていると即座に判断することも可能です。

ただし、ページ内の任意の場所にユーザーコードを表示しないように注意する限り、安全である必要があります。これは、特に、入力がサイトの他のどこかで出力された場合(たとえば、ニュース記事のコメント)、ユーザーが入力したすべての入力をエスケープする必要があることを意味します。

関連する問題