<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 2.10 自定義安全管理器 所有模板的本地調用都需要通過安全管理器校驗,默認需要實現NativeSecurityManager 的public boolean permit(String resourceId, Class c, Object target, String method) 方法 如下是Beetl3.17版本后默認的白名單管理器,只允許java.util包的Java調用 ```java public class WhiteListNativeSecurityManager implements NativeSecurityManager { Pattern callPattern = null; public WhiteListNativeSecurityManager(){ allow(Arrays.asList("java.util")); } @Override public boolean permit(Object resourceId, Class c, Object target, String method) { if (c.isArray()) { // 允許調用,但實際上會在在其后調用中報錯。不歸此處管理 return true; } String name = c.getName(); int i = name.lastIndexOf('.'); if (i == -1) { // 無包名,肯定安全,允許調用 return true; } return callPattern.matcher(name).matches(); } } ``` 可以自定義安全管理器,或者調用allow方法添加更多允許的Java調用 ``` WhiteListNativeSecurityManager securityManager = new WhiteListNativeSecurityManager(); securityManager.allow(Arrays.asList("java.util","com.mycorp.project.util","com.mycorp.project.constants.Constants)); ``` 在Beetl3.17版本之前,默認使用的是DefaultNativeSecurityManager,他采用黑名單管理方式,杜絕了目前已知的漏洞(但不保證未來有安全漏洞)如下是默認管理器的實現方法 ```java public class DefaultNativeSecurityManager implements NativeSecurityManager{ @Override public boolean permit(String resourceId, Class c, Object target, String method){ if (c.isArray()){ //允許調用,但實際上會在在其后調用中報錯。不歸此處管理 return true; } String name = c.getSimpleName(); String pkg = c.getPackage().getName(); if (pkg.startsWith("java.lang")){ if (name.equals("Runtime") || name.equals("Process") || name.equals("ProcessBuilder") || name.equals("System")){ return false; } } //省略其他安全漏洞屏蔽代碼 return true; } } ``` **需要強調的是,當允許在Beetl模板中使用Java本地調用,且使用DefaultNativeSecurityManager,且Beetl的模板編寫權利交給瀏覽器終端用戶,才有可能發生安全漏洞**,這跟Struts框架,Spring框架,JSON工具的漏洞原因是一樣的,但發生幾率相比這些Web框架來說,幾乎不可能,就好比如果把Java編寫編譯的權利交給瀏覽器終端用戶,那Java也有安全漏洞
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看