-
web安全问题 AppScan30
首先简单描述一下系统情况:采用的技术struts1.2,EJB3.0,另外公司以前封装了一套jsp标签;应用服务器jboss4.0.2;数据库为SQL Server2005。
目前我还有2类问题还没有解决—1:会话标识未更新
2:发现数据库错误模式
希望有解决过此类问题的大虾们,能给予一点帮助!再次先行谢过!!
系统将近验收的时候,对方发过来一份安全报告- -我们开发的系统有安全漏洞,让我们把漏洞级别为严重的全部解决,否者不予验收。对于这些问题,公司其它项目组包括我都没有人曾经做过(也就是说系统从开始打框架到后来的开发过程没有任何人注意这些问题)。此时脑海浮现一句较为经典的网语“内事问baidu,外事问google…”。经过几天的搜索,简单描述一下我对以下几个安全问题的理解:
1发现数据库错误模式:主要是一些数据连接错误信息,通过提交特殊构造的字符,程序会暴露一些数据库信息,也容易引起SQL注入攻击。
2会话标识未更新:是cookies过期时间未设置,可能会引发一些cookies欺骗攻击。
3跨站点请求伪造:这个是高级攻击技术,是黑客作为中间人攻击,这个漏洞是程序造成的,在不同的会话中两次发送同一请求并且收到相同的响应,也就是说客户端与服务端建立连接后,客户端向服务端提交数据,服务端只认客户端需要什么而返回什么内容给客户端,并没有对客户端的身份进行认证。
4不充分帐户封锁:程序没有使用锁定功能,可以穷举密码。
5跨站点脚本编制:实际翻译应该是跨站脚本攻击。也就是XSS,是服务端没有对客户端提交的参数进行过滤,例如:2009>%22%27><img%20src%3d%22javascript:alert(473443)%22>,这个就会弹出一个窗口,还可以弹出其他页面,或者做页面跳转等攻击,通常攻击者用来挂马。
6 SQL 盲注也是要对参数进行过滤,包括危险字符,‘,;@,==,而且通过cookies提交的值也要进行过滤。
以下内容是我解决这些问题的过程
首先找了个IBM Rational AppScan 7.8的破解版装上
(一) 既然http访问有问题安全,那么我换个安全点的https试了试,结果发现严重级别的没有减少,反而严重程度为一般的倒是增加了好几类,晕!
(jboss4.0.2配置https服务的步骤在压缩文件里面)
(二) 对于sql盲注有一下2种情况
1:http://172.16.200.219:9090/project/projectmemberaction.do (2)
code
name
2:http://172.16.200.219:9090/system/orgbaseinfoaction .do (3)
TcnSystemOrgDto.code
TcnSystemOrgDto.fullname
TcnSystemOrgDto.addrss
[(2)(3)分别表示该链接下面漏洞注入的个数]
我针对安全扫描的提示,逐个修改了对数据库列表及查询的操作,使其全部采用prepareStatement预编译的方式。因为系统涉及到的页面太多,对于用户输入框的过滤就不可能一个一个的去修改,因此我写了个filter
/**
* <filter>
<filter-name>SQLFilter</filter-name>
<filter-class>com.ebuilds.aas.SqlInjection</filter-class>
<init-param>
<param-name>sqlkey</param-name>
<param-value> '|exec|execute|insert|create|drop|table|having|user|%20|union|where|select|delete|update|count|*|document.cookie|xp_cmdshell|'|chr|mid|master|truncate|char|declare|or |;|--|,|%20and%20|%20or%20|//|/|%|#|script|<img|%3cimg </param-value>
</init-param>
</filter>
*
* <filter-mapping>
<filter-name>SQLFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SQLFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
*/
public class SqlInjection implements Filter {
protected FilterConfig filterConfig;
protected String encodingName;
protected String sqlkey = null;
public void init(FilterConfig filterConfig) throws ServletException{
this.filterConfig = filterConfig;
this.sqlkey = filterConfig.getInitParameter( "sqlkey" ); }
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httprequest = (HttpServletRequest) request;
HttpServletResponse httpresponse = (HttpServletResponse) response;
//用于的使 Browser 不缓存页面的过滤器
httpresponse.setHeader("Cache-Control","no-cache");
httpresponse.setHeader("Pragma","no-cache");
httpresponse.setDateHeader ("Expires", -1);
List<String> list=new ArrayList<String>();
//String responseURI = "";
//int i = 0;
//StringBuffer sb = new StringBuffer("");
java.util.Enumeration enu = httprequest.getParameterNames();
String strurl = httprequest.getRequestURI();
//System.out.println("strurl:"+strurl);
String strenu = "";
while (enu.hasMoreElements()) {
strenu = (String) enu.nextElement();
if(!"xml.req.fields".equals(strenu) && !"xml.req.charset".equals(strenu)&& !"xml.req.parentid".equals(strenu)&& !"xml.req.querystr".equals(strenu)&& !"xml.req.ids".equals(strenu)){
//if (i == 0)
// sb.append(strenu + "=");
//else
// sb.append("&" + strenu + "=");
//sb.append(new String(httprequest.getParameter(strenu).getBytes("iso-8859-1"), "UTF-8"));
//i++;
String val=new String(httprequest.getParameter(strenu).getBytes("iso-8859-1"), "UTF-8").toLowerCase();
if(!isNum(val)){//过滤掉是数字形式的参数
list.add(val);
}
}
}
//responseURI = sb.toString().toLowerCase();
if (null!=strurl && !"".equals(strurl) && null!=list && list.size()>0) {
boolean blag = false;
java.util.StringTokenizer stk = new java.util.StringTokenizer(sqlkey, "//|");
String temp = "";
while (stk.hasMoreTokens()) {
temp = stk.nextToken();
if(null!=temp && !"".equals(temp)){
for(int s=0;s<list.size();s++){
String para=list.get(s).toString();
if(para.indexOf(temp) != -1){
blag = true;
break;
}
}
}
}
if (blag) {
httpresponse.sendRedirect("/Sqlinjection.jsp");
} else {
chain.doFilter(request, response);
}
} else {
chain.doFilter(request, response);
}
}
public void destroy() {
this.sqlkey = null;
this.filterConfig = null;
}
//是数字返回true
private static boolean isNum(String str){
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if( !isNum.matches()){
return false;
}
return true;
}
}
做完这些之后,再继续扫描,发现第1种注入问题已经解决,然而第2种问题依旧,而且每次扫描的链接还不一样,正在苦恼之际看到CSDN上有个如下的帖子
彻底杜绝SQL注入
1.不要使用sa用户连接数据库
2、新建一个public权限数据库用户,并用这个用户访问数据库
3、[角色]去掉角色public对sysobjects与syscolumns对象的select访问权限
4、[用户]用户名称-> 右键-属性-权限-在sysobjects与syscolumns上面打“×”
其原文见如下路径
http://topic.csdn.net/u/20091221/18/6693545C-A659-4E3B-9454-EBB77D6C8D1F.html
至此,SQl盲注问题就已经解决。(前面的那个过滤器是否多余?这个问题还没来得及验证)
(三) 对于XSS问题,网上给的意见同样是过滤用户的输入。系统都在验收的阶段,哪有时间对输入框去做限制呢!同样写个filter
代码如下:
public class XSSFilter implements Filter {
private FilterConfig config;
private static boolean no_init = true;
public XSSFilter() {
config = null;
}
public void init(FilterConfig filterconfig) throws ServletException {
config = filterconfig;
no_init = false;
}
public void destroy() {
config = null;
}
public FilterConfig getFilterConfig() {
return config;
}
public void setFilterConfig(FilterConfig filterconfig) {
if (no_init) {
no_init = false;
config = filterconfig;
}
}
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain) throws IOException, ServletException {
filterchain.doFilter(new RequestWrapper((HttpServletRequest)servletrequest), servletresponse);
//RequestWrapper见附件
}
}
(一)font:
2010年3月15日 14:35
目前还没有答案
相关推荐
《WEB安全检测AppScan用户中文指南》是一本专为IT专业人士设计的实用手册,旨在帮助用户深入了解并有效地使用IBM的AppScan工具进行Web应用程序的安全检测。AppScan是业界广泛认可的自动化安全扫描软件,用于发现并...
Web安全扫描工具AppScan是IBM Rational推出的一款强大的应用安全扫描软件,主要针对Web应用程序的安全检测。AppScan家族包含了多种版本,如Source Edition用于源代码安全扫描,Standard Edition用于Web应用的快速...
标题中的“web安全扫描问题疑问 AppScan”表明讨论的主题聚焦在Web应用的安全性上,特别是使用了IBM的应用安全扫描工具AppScan。AppScan是一款广泛使用的工具,用于检测Web应用程序的安全漏洞,如SQL注入、跨站脚本...
在给定的资源中,《AppScan用户指南》和《Web安全深度剖析》为我们提供了深入理解这一领域的关键知识。 《AppScan用户指南》聚焦于IBM的AppScan工具,这是一个强大的静态和动态应用安全测试解决方案。AppScan允许...
AppScan是IBM公司推出的一款强大的Web应用程序安全测试工具,它主要针对常见的Web应用安全漏洞进行黑盒测试。通过深入分析和扫描,AppScan能够帮助企业识别并预防潜在的安全风险,确保Web应用的安全性。 首先,...
总的来说,AppScan 9.0.3.13是企业确保Web应用安全的重要工具,而安全规则18533则是其检测URF漏洞的关键组成部分。通过深入了解和正确使用这些工具,开发者可以有效地防止安全事件,保护企业和用户的数字资产。
一款强大的 web安全 扫描工具,可以对网站等 Web 应用 进行自动化的 应用安全扫描和 测试。
AppScan的Web应用安全测试使用简明AppScan的Web应用安全测试使用简明AppScan的Web应用安全测试使用简明
IBM的AppScan是一款业界公认的安全扫描工具,主要用于检测Web应用程序的安全漏洞。AppScan 10.2.0是该系列的最新版本,经过实际测试,证明其功能强大且稳定可靠。这款工具的核心价值在于帮助开发者和安全团队在开发...
【安全扫描工具HCL AppScan最新版本10.0.7】是一款强大的Web应用程序安全测试解决方案,由全球知名科技公司HCL Technologies开发。这个版本带来了最新的功能和改进,旨在为用户提供更高效、全面的安全评估体验。...
AppScan是对网站等WEB应用进行安全攻击,通过真刀真枪的攻击,来检查网站是否存在安全漏洞,在使用AppScan的时候,要配置的第一个就是要检查的网站的地址,配置了以后,AppScan就会利用“探索”技术去发现这个网站...
3. **报告(Reporting)**:测试完成后,AppScan会生成详细的报告,指出哪些页面存在何种类型的安全漏洞,帮助开发者或安全专家快速定位问题。 #### 四、AppScan操作指南 ##### 1. 配置目标网站 首先,需要在...
Web安全测试是AppScan的核心功能之一,它通过模拟攻击来检测Web应用的安全弱点。AppScan可以扫描HTTP/HTTPS协议,识别潜在的注入攻击、跨站请求伪造(CSRF)、文件包含漏洞等,并生成详细的报告供用户参考。 4. **...
本压缩包“AppScan.zip”包含了多个文档,详细介绍了AppScan的使用方法、安全测试技术和Web安全相关的基础知识。 《如何进行WEB安全性测试.doc》文档可能会涵盖Web应用程序安全的基础概念,包括SQL注入、跨站脚本...
报告和监控:AppScan可以生成详细的报告,以帮助开发人员和测试人员确定需要进行修复的安全问题,同时还可以监控Web应用程序的安全性。 集成和可扩展性:AppScan可以与其他开发和测试工具集成,以提高开发和测试效率...
AppScan是用于web项目的安全测试工具,扫描网站所有url(自动+手动),自动测试是否存在各种类型的漏洞。1、下载解压缩,得到获得AppScan10中文版原程序; 2、首先双击“AppScan_Setup_10.0.0.exe”开始安装,选择...
AppScan是IBM公司推出的一款强大的安全检测和分析工具,尤其在Web应用安全领域享有盛誉。AppScan 10.0版本是专为Windows操作系统设计的,它集成了先进的技术来帮助开发者、安全专家和企业识别并修复Web应用程序中的...
AppScan的安装教程和测试报告:IBM AppScan该产品是一个领先的 Web 应用安全测试工具,曾以Watchfire AppScan 的名称享誉业界。Rational AppScan 可自动化 Web 应用的安全漏洞评估工作,能扫描和检测所有常见的 Web ...
MFA-安全问题回复:在回放登入期间以及自动探索期间,AppScan将检测需要安全问题值的字段,并设定正确的答案。 UX更新:包括非漏洞信息查看、变体表的多重选择、排序和更改列宽等功能。 扫描策略更新:提供了更灵活...