CSRF Security Error解决办法

1 篇文章 0 订阅

在myeclipse上部署项目,遇到如下问题:

错误描述:

org.directwebremoting.dwrp.BaseDwrpHandler - A request has been denied as a potential CSRF attack.
org.directwebremoting.dwrp.BaseCallHandler - Exception while processing batch
java.lang.SecurityException: CSRF Security Error

  at org.directwebremoting.dwrp.BaseDwrpHandler.checkNotCsrfAttack(BaseDwrpHandler.java:85)
  at org.directwebremoting.dwrp.BaseCallHandler.handle(BaseCallHandler.java:76)
  at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:120)
  at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:141)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process  (Http11Protocol.java:581)
  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
  at java.lang.Thread.run(Thread.java:619)

 

解决办法:

修改 web.xml 中 DWR 配置信息

原:

<servlet>  
      <servlet-name>dwr-invoker</servlet-name>  
     <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>  
     <init-param> 
      <param-name>debug</param-name> 
      <param-value>true</param-value> 
  </init-param>
</servlet>

 

加入跨域调用配置信息(红色部分),修改为:

<servlet>  
      <servlet-name>dwr-invoker</servlet-name>  
      <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>  
      <init-param> 
             <param-name>debug</param-name> 
             <param-value>true</param-value> 
      </init-param>
      <init-param>
             <param-name>crossDomainSessionSecurity</param-name>
             <param-value>false</param-value>
      </init-param>
      <init-param>
            <param-name>allowScriptTagRemoting</param-name>
            <param-value>true</param-value>
      </init-param>

</servlet>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用JavaScript库JQ (jQuery) 或 JSP (JavaServer Pages) 遇到 "csrf error" 时,这通常表示跨站请求伪造(Cross-Site Request Forgery, CSRF)问题。CSRF 是一种安全攻击,攻击者可能利用用户已登录的身份执行未经授权的操作。 **解决方法**: 1. **JQ (jQuery)**: - 首先,确保你的应用程序已经包含了防止CSRF的措施,如设置CSRF令牌并在请求中包含它。 - 在发送AJAX请求时,添加CSRF令牌到`data`参数或者`headers`中,例如: ```javascript $.ajax({ url: 'your-api-endpoint', type: 'POST', data: { 'your-data': '...', '_csrf': $('meta[name="csrf-token"]').attr('content') }, success: function(response) { // 处理响应 }, error: function(xhr, status, error) { if (xhr.status === 403 && xhr.responseText.includes('csrf error')) { console.error('CSRF error'); } } }); ``` - 在后端检查并验证这个令牌是否有效。 2. **JSP (JavaServer Pages)**: - 在Java端,你可以使用Spring Security等框架提供的CSRF保护功能。这可能涉及到在HTTP头或表单隐藏字段中添加`_csrf`或`X-CSRF-TOKEN`字段,并在验证请求时检查。 - 在`org.springframework.security.web.csrf.CsrfFilter`启用后,Spring会自动处理CSRF验证。 - 在JSP中,你可以这样做: ```jsp <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> ``` **相关问题--:** 1. CSRF是什么,它如何导致错误? 2. 如何在JSP中防止和处理CSRF错误? 3. Spring Security如何集成并使用CSRF保护?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值