跨站点脚本(XSS)的可能性



我在我的应用程序中发现了以下代码:

eval( 'window.opener.' + fct );

变量fct来自get参数(因此它可以由用户更改)。

有可能传递一些邪恶的值来执行JavaScript吗?我不确定,因为如果你更改URL并将链接发送给用户,然后他点击它,窗口。"将为空,因此将抛出错误:

eval( 'window.opener.x; alert(1);' ); // Uncaught TypeError: Cannot read property 'x' of null

是否存在可能导致安全问题的攻击媒介?我知道,你永远不应该使用eval() -但我也会试图找到一个概念的证明。

谢谢!

如果fctx = alert('yes'),那么它将导致:

window.opener.x = alert('yes')

和表达式的右边将首先求值,允许代码执行。

如果你不希望触发任何错误,你可以这样做:

window.opener.x = (window.opener={pwnd:confirm('game over')})

是否存在可能导致安全问题的攻击媒介?

是的。您正在执行任意JavaScript。任何代码都可以运行。这是严重的安全问题。

首先,在JavaScript上下文中使用的任何变量数据都应该是json编码的,这与JavaScript兼容。您没有说明使用的是哪种服务器端语言,所以这里有一个PHP示例来说明:

var fct = <?php echo json_encode($_GET['fct']); ?>;

如果fct是从查询字符串客户端解析的,这个直接的问题不存在,因为你没有解析任意字符串作为JavaScript在这一点上。但是,您仍然有eval问题。

你应该这样重写你的代码:

window.opener[fct]

这样,你只引用你需要的,而不注入脚本。

现在,您还需要将此变量中的内容列入白名单,如果opener包含您不想暴露的内容

最新更新