2013-04-01 5 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') хранит src для iframe, а rel создается PHP (без ввода пользователем здесь).
  3. И $iframe имеет форму для загрузки.

Меня беспокоит то, что в этом случае src iframe является переменной. Я боюсь, что злонамеренный пользователь каким-то образом сумеет отредактировать атрибут rel и открыть iframe, который он или она хочет. Это возможно?

EDIT

Спасибо за ваши ценные ответы.

PHP использует следующее для заполнения отн:

App::basePath . '/some/path/to/my/folder'; 

Где basePath является константой, разработчик выбирает.

Я перепроектирую свой jquery более подходящим образом, как вы, ребята, предложили.

+1

И очевидный сценарий, когда '$ (это) .attr («отн»)' содержит символы, имеют смысл в HTML и требуют ускорения. Вы должны действительно использовать 'attr()' для заполнения атрибута 'src'. –

ответ

3

Теоретически, если атрибут rel основан на константе сервера, не должно быть никаких дополнительных проблем безопасности, кроме тех, которые вы не можете контролировать, например, MiTM.

Однако вы всегда должны быть в безопасности с этими вещами; и JQuery предусматривает, что безопасность, позволяя атрибуты тега, которые передаются в качестве второго аргумента в конструктор:

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

Отредактированный вопрос. См. Редактирование. – Shaokan

+0

@Shaokan Вы уже заявили, что 'rel' не основан на пользовательском вводе, хотя :) –

+0

Да, это было просто обязательно :) Спасибо в любом случае, я немного параноик, когда дело доходит до безопасности. – Shaokan

1

Если злоумышленник не может получить атрибут rel ссылки, он должен быть безопасным.

Однако трудно сказать, что кусок кода безопасен или нет, без подробного изучения окружающей среды, в которой он работает. Возможно, можно получить доступ к «безопасному» фрагменту кода с другой кнопки, мгновенно сделав предположение, что атрибут rel недействителен.

Однако, если вы не станете предоставлять код пользователя в любом месте своей страницы, вы должны быть в безопасности. Это означает, что вам нужно избегать ввода каждого пользователя, особенно если этот ввод выводится где-то еще на вашем сайте (например, комментарий к новостной статье).