这个jquery代码是安全的吗?

时间:2013-04-01 09:02:26

标签: jquery security

以下代码是否安全?

$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包含要上传的表单。
  4. 我担心的是,因为在这种情况下,iframe的src是一个变量,我担心恶意用户会以某种方式设法编辑'rel'属性并打开他或她想要的iframe。这可能吗?

    修改

    感谢您的宝贵答案。

    php使用以下内容填充rel:

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

    其中basePath是开发人员选择的常量。

    我会像你们建议的那样以更恰当的方式重新设计我的jquery。

2 个答案:

答案 0 :(得分:3)

理论上,如果rel属性基于服务器常量,除了您无法控制的问题之外,不应存在其他安全问题,例如MiTM。

然而,你应该始终对这些事情保持安全; jQuery通过允许将标记的属性作为第二个参数传递给构造函数来提供安全性:

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

答案 1 :(得分:1)

除非攻击者能够获得链接的rel属性,否则它应该是安全的。

然而,如果没有详细查看运行环境,很难说一段代码是否安全。可以从不同的按钮访问“安全”代码片段,立即假设rel属性被控制无效。

但是,只要您注意不要在页面中的任何位置呈现用户代码,您应该是安全的。这意味着您必须转义每个用户提供的输入,特别是如果该输入在您站点的其他位置输出(例如,对新闻文章的评论)。