1

遊戲推薦方法來設置「內容安全策略」是設置集「內容安全策略」動態地發揮2.5

play.filters.headers.contentSecurityPolicy 

在application.conf。

但我的要求是通過讀取覆蓋配置文件中的一些自定義條目來在代碼中動態設置它。

有些人可以通過覆蓋application.conf中的play.filters.headers.contentSecurityPolicy值來建議一種在Play程序設置中設置contentSecurityPolicy的方法。

+0

你是什麼意思的「動態」?你的應用中的不同網址需要不同的值?你能給出一個你想要實現的簡潔例子嗎? – Salem

回答

0

我的requiremnet的解決方案是擴展GuiceApplicationLoader。 (Play documentation on this.)

//以下解決方案是將應用程序配置中的「play.filters.headers.contentSecurityPolicy」與應用程序配置中的另一個自定義設置疊加在一起。

public class MyApplicationLoader extends GuiceApplicationLoader { 

@Override 
public GuiceApplicationBuilder builder(ApplicationLoader.Context context) { 

    String trustedserverList = ""; 
    if (context.initialConfiguration().getString("custom.csp.trusted.serverlist") != null){ 
     trustedserverList = context.initialConfiguration().getString("custom.csp.trusted.serverlist"); 
    } 

    for (Iterator<Entry<String, ConfigValue>> iter = context.initialConfiguration().entrySet().iterator(); iter.hasNext();) { 
     Entry<String, ConfigValue> con = iter.next(); 

     if (StringUtils.equals(con.getKey(), "play.filters.headers.contentSecurityPolicy")) { 
      String csp = context.initialConfiguration().getString("play.filters.headers.contentSecurityPolicy"); 
      csp = String.format(csp,trustedserverList);      
      Configuration extra = new Configuration("play.filters.headers.contentSecurityPolicy=\"" + csp + "\"");    
      return initialBuilder 
        .in(context.environment()) 
        .loadConfig(extra.withFallback(context.initialConfiguration())) 
        .overrides(overrides(context)); 
     } 
    } 
    return initialBuilder 
     .in(context.environment()) 
     .loadConfig(context.initialConfiguration()) 
     .overrides(overrides(context)); 
} 

}

+0

你不需要這樣做 - 你可以添加自己的EssentialFilter,添加一個Content-Security-Policy頭,並通過將contentSecurityHeader行設置爲null來禁用它。例如,請參閱https://github.com/playframework/play-scala-chatroom-example/blob/2.6.x/app/filters/ContentSecurityPolicyFilter.scala。 –

0

我不知道關於Play的任何內容,但是一種普遍有效的方式add事情到您的CSP使用除標頭以外的元標記。框架/庫對動態的支持很少見。

從優選的遞送機制http://www.html5rocks.com/en/tutorials/security/content-security-policy/

的CSP是HTTP標頭。然而, 直接在標記中設置頁面上的策略會很有用。做到這一點使用元標籤與HTTP-equiv屬性 :

<meta http-equiv="Content-Security-Policy" content="default-src 
https://cdn.example.net; child-src 'none'; object-src 'none'"> 

這不能用於幀的祖先,報告-URI或沙箱。

注意:在meta標籤不會覆蓋頭值的政策,這是因爲如果你送了兩個頭:他們是添加劑。