DWRセキュリティ資料収集


実習プロジェクトではDWRが使われていますが、これは本当に強力なもので、ページ上で不思議なサーバ呼び出しをすることができます.(jsとjavaツインJが合わさってほとんどRIAができるようになったと思いますが、私はそう思います)
しかし、すべてのJS上のものとR(Remoteリモートコール)のもののように、セキュリティは最も保証しにくいものであり、ユーザーが対応するjsをダウンロードしてサーバー上のビジネス方法を呼び出すことができることを想像してみると、背後で涼しくなっていることを思い出します.
ネット上でFilterでAccess Controlをしている人を見るのも悪夢です.プロジェクト内の業務はIXXXXServicesのインタフェースとして書かれており、注記によりDwrに呼び出されるようになっている.これは違和感があるように見えますね.
 
注記クラスDWRへ:
@RemoteProxy(name = "TopicRemote", creator = SpringCreator.class, creatorParams = { @Param(name = "beanName", value = "TopicServiceImpl") })
public class TopicServiceImpl implements ITopicService{

Remoteメソッド
@RemoteMethod
	public int deleteTopicDomain(long topicDomainID) throws Exception {

  
 
それとも、異なるメソッドに異なる呼び出しドメインがあるかを注釈する方法はありますか?本人は実は大菜鳥で、DWRのXML配置にもシロ(springのも).
 
参考資料(よく読めません):
  http://topic.csdn.net/u/20081203/09/35744ab2-bf31-49b2-b32c-3e64aeb18cf6.html
dwrの安全性の実現を見てみると、dwr自身は安全問題に真剣に対処していることを示しており、以下のステップで安全問題が発生することを防止している1、dwrはdwrに対してのみ対応する.xmlで定義したjava beanとmethodをマッピングcreate要素で定義したclass 2、dwrはconvertで定義したclassのみを変換します
 
Filter方式:
http://blog.chinaunix.net/u1/55983/showart_1662554.html
 
public class DwrACL
    extends HttpServlet implements Filter {
  private FilterConfig filterConfig;
  //Handle the passed-in FilterConfig
  public void init(FilterConfig filterConfig) throws ServletException {
    this.filterConfig = filterConfig;
  }
 
  //Process the request/response pair
  public void doFilter(ServletRequest request, ServletResponse response,
                       FilterChain filterChain) {
    RequestDispatcher dispatcher = null;
    ServletContext context = filterConfig.getServletContext();
    try {
      HttpServletRequest httpServletRequest = (HttpServletRequest) request;
      HttpServletResponse httpServletResponse = (HttpServletResponse) response;
      HttpSession session = httpServletRequest.getSession();
      
      
      String logined = (String)session.getAttribute("logined");
 
      //        dwr   ,    ,       .
      if (logined != null && logined.equals("yes")) {
          filterChain.doFilter(request, response);
      } else {
          dispatcher = context.getRequestDispatcher("/error.jsp");
          dispatcher.forward(request, response);
      }
 
    } catch (Exception iox) {
      iox.printStackTrace();
      filterConfig.getServletContext().log(iox.getMessage());
    }
  }
 
  //Clean up resources
  public void destroy() {
  }
}

 
refer方式(盗難防止チェーンによる考え方):
http://www.iteye.com/topic/211487
「DWRを使用しているとき、AOPテクノロジーを利用して権限を判断しました.権限を指定してアクセスできるリソースであれば、権限がない場合に異常が報告されます.セキュリティとは、「別の」場所からAjax方式でリソースを読み取ることを望んでいないのか、それとも権限に関する問題があるのか分かりません.他のサイトにアクセスしたくないだけなら、referでいいと思いますが、権限の問題があれば、権限を判断すれば解決できます」ととても良いようです.