6

下面的代码安全吗?

$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。这可能吗?

编辑

感谢您的宝贵回答。

php 使用以下内容来填充 rel:

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

basePath开发人员选择的常数在哪里。

我会按照你们的建议以更合适的方式重新设计我的 jquery。

4

2 回答 2

3

从理论上讲,如果rel属性基于服务器常量,那么除了您无法控制的安全问题(例如 MiTM)之外,应该没有其他安全问题。

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

$iframe = $('<iframe />', {
    id: "iframe",
    src=: $(this).attr('rel'),
    name: "iframe"
});
于 2013-04-01T09:13:41.663 回答
1

除非攻击者可以获取链接的 rel 属性,否则它应该是安全的。

但是,如果不详细了解它运行的环境,就很难说一段代码是否安全。可以从不同的按钮访问“安全”的代码段,立即使您假设 rel 属性被控制为无效。

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

于 2013-04-01T09:09:45.970 回答