Symfony 2静态资产授权(防火墙后面的.js)

时间:2012-07-31 23:14:52

标签: security symfony authorization assetic

保护防火墙后面的静态资产(javascript和css)的步骤是什么? 我有一个管理部分,大量使用javascript。我真的不想公开代码。

我目前在/web/admin/js/xyz.js中使用资产编译我的所有javascript文件

有一种简单的方法可以做到这一点,我忽略了吗?

2 个答案:

答案 0 :(得分:5)

您可以使用控制器来提供静态文件并保护该控制器。类似的东西:

/** 
 * Serves static javascript file. 
 * We have configured /secure to be secured by some firewall
 *
 * @Route("/secure/xyz.js", name="static_xyz")
 */
public function staticXyzAction()
{   

    $headers = array(
        'Content-Type' => 'text/javascript',
    );  

    return new Response(file_get_contents($this->get('kernel')
        ->getRootDir().'../web/admin/js/xyz.js'), 200, $headers);
}   

这只是您提供的数据的一个示例。显然,在您的最终代码中,所提供的文件应位于某个目录中,该目录不能由Web服务器直接访问。

这种方法的明显缺点是性能。对于提供静态文件而言,PHP比Web服务器慢得多,但根据您的负载,这可能不是问题。

答案 1 :(得分:1)

为什么要“隐藏”这些管理js文件? js不应该执行关键的身份验证或检查权限,而只是与执行此操作的Sf2 Apis / Controllers交谈,如果读取则不应该是关键的。这是一个概念问题。

如果你害怕lambda用户/黑客看到这些js文件,你可以在Assetic中设置一个非常复杂的随机js输出。 Symfony .htaccess只允许用户访问静态文件,只有当他们知道确切的URL时,他们才能列出存储构建资产的存储库,防火墙会抓住它。

最后一次安全测试,使用yui-minifier和Assetic来缩小和反映你构建的js文件。