WEB开发安全漏洞修复方案

密级:保密

WEB开发安全漏洞修复方案

(V1.0)

文档编号:文档名称:WEB开发安全漏洞修复方案编写:审核:

批准:批准日期:

技术研究部

文档修订记录

(V1.0) (1)

1.1背景 (1)

1.2FSDP安全漏洞清单 (1)

1.3安全漏洞修复方案 (1)

1.3.1会话标识未更新 (1)

1.3.2登录错误消息凭证枚举 (2)

1.3.3不充分帐户封锁 (2)

1.3.4跨站点脚本编制 (3)

1.3.5已解密的登录请求 (6)

1.3.6跨站点脚本编制 (10)

1.3.7通过框架钓鱼 (14)

1.3.8链接注入(便于跨站请求伪造) (19)

1.3.9应用程序错误 (26)

1.3.10SQL注入 (30)

1.3.11发现数据库错误模式 (40)

1.3.12启用了不安全的HTTP方法 (49)

1.3.13发现电子邮件地址模式 (51)

1.3.14HTML注释敏感信息泄露 (52)

1.3.15发现内部IP泄露模式 (53)

1.3.16主机允许从任何域进行flash访问 (54)

1.3.17主机应用软件漏洞修复 (54)

1.3.18目录列表 (55)

1.3.19跨站点请求伪造 (56)

1.1需要注意的问题 (57)

1.1背景

随着移动公司对信息安全的进一步加强,要求我们部署的系统必须满足安全扫描要求。本文档描述了安徽移动对FSDP安全扫描的漏洞的解决方案,并作为WEB开发的安全编程规范。

1.2FSDP安全漏洞清单

见《WEB开发安全漏洞清单.xlsx》

1.3 安全漏洞修复方案

1.3.1会话标识未更新

(一)URL

http://10.149.113.200/loginAction.do

(二)安全问题描述

根据WASC:“会话固定”是一种攻击技术,会强制用户的会话标识变成显式值。固定会话标识值的技术有许多种,会随着目标Web 站点的功能而不同。从利用“跨站点脚本编制”到向Web 站点密集发出先前生成的HTTP 请求,都在这些技术范围内。用户的会话标识固定之后,攻击者会等待用户登录,然后利用预定义的会话标识值来假定用户的联机身份。

(三)攻击方法

登录过程前后会话标识的比较,显示它们并未更新,这表示有可能伪装用户。初步得知会话标识值后,远程攻击者有可能得以充当已登录的合法用户。

任何时候,只要一名用户与应用程序的交互状态由匿名转变为确认,应用程序就应该发布一个新的会话令牌。这不仅适用于用户成功登录的情况,而且适用于匿名用户首次提交个人或其他敏感信息时。

(四)安全规范要求

COOKIE中的登陆前JSESSIONID与登陆后JESSIONID不能相同。(只有J2EE应用服务器为JESSIONID,其他应用服务器可能不同)

(五)解决方案

将如下代码加入到登陆页面(login.jsp)的最后行:

<%

request.getSession().invalidate();//清空session

Cookie cookie = request.getCookies()[0];//获取cookie

cookie.setMaxAge(0);//让cookie过期

%>

1.3.2登录错误消息凭证枚举

(一)URL

http://10.149.113.200/loginAction.do

(二)安全问题描述

当试图利用不正确的凭证来登录时,当用户输入无效的用户名和无效的密码时,应用程序会分别生成不同的错误消息。

通过利用该行为,攻击者可以通过反复试验(蛮力攻击技术)来发现应用程序的有效用户名,再继续尝试发现相关联的密码。这样会得到有效用户名和密码的枚举,攻击者可以用来访问帐户。

(三)攻击方法

修改http://10.149.113.200/loginAction.do的HTTP报文头:将参数“optrid”的值设置为“test123WithSomeChars”,除去cookie“JSESSIONID”,除去HTTP 头“Cookie=JSESSIONID”。

(四)安全规范要求

对每个错误的登录尝试发出相同的错误消息,不管是哪个字段发生错误,特别是用户名或密码字段错误。

(五)解决方案

LoginImpl.java类中getLoginInfo方法,涉及到登录错误提示的都改成:

“您输入的用户名或密码不正确!”。

登录超过3次数的改成:

“您尝试登陆失败超过"+Constans.LOGIN_ERROR_TIMES+"次,请30分钟后再登陆!”。

1.3.3不充分帐户封锁

(一)URL

http://10.149.113.200/loginAction.do

(一)安全问题描述

发送了两次合法的登录尝试,并且在其间发送了几次错误的登录尝试。最后一个响应与第一个响应相同。这表明存在未充分实施帐户封锁的情况,从而使登录页面可能受到蛮力攻

击。(即使第一个响应不是成功的登录页面,也是如此。)

(二)攻击方法

修改http://10.149.113.200/loginAction.do的HTTP报文头:除去cookie“JSESSIONID”,除去HTTP 头“Cookie=JSESSIONID”。

(三)安全规范要求

多次登录尝试失败后实施帐户封锁

(四)解决方案

LoginImp.java中的getLoginInfo方法,修订如下代码片段:

//判断登陆失败次数

if(!checkLoginError(logininfo)){

ret.setRetCode("0003");

ret.setRetDesc("您尝试登陆失败超过

"+Constans.LOGIN_ERROR_TIMES+"次,请

"+Constans.LOGIN_ERROR_LOCK_SECOND+"分钟后再登录!");

return ret;

}

//增加验证登陆错误次数代码

addLoginErrorRec(logininfo);

1.3.4跨站点脚本编制

(一)URL

http://10.149.113.200/callAction.do

http://10.149.113.200/loginAction.do

(二)安全问题描述

可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。

(三)攻击方法

Web 站点中所包含的脚本直接将用户在HTML 页面中的输入(通常

是参数值)返回,而不预先加以清理。如果脚本在响应页面中返回由JavaScript 代码组成的输入,浏览器便可以执行此输入。因此,有可能形成指向站点的若干链接,且其中一个参数

包含恶意的JavaScript 代码。该代码将在站点上下文中(由用户浏览器)执行,这使得该代码有权访问用户在该站点中具有访问权的cookie,以及站点中其他可通过用户浏览器访问的窗口。

攻击依照下列方式继续进行:攻击者诱惑合法用户单击攻击者生成的链接。用户单击该链接时,便会生成对于Web 站点的请求,其中的参数值含有恶意的JavaScript 代码。如果Web 站点将这个参数值嵌入在响应的HTML 页面中(这正是站点问题的本质所在),恶意代码便会在用户浏览器中运行。

(四)安全规范要求

FSDP框架中在传递参数时有两个主要参数classes与common,一个指定要调用的service,一个是调用service中的方法,如果service或方法不存在,就会跳转到错误信息显示,并将详细的错误信息显示出来,如:callAction.do?method=call&nextPage=/oa/task/task_querylayout.jsp&c lasses=taskClientImpl&common=getInfoQueryDate这个URL,如果我们将URL 修改一下,变成如下:

callAction.do?method=call&nextPage=/oa/task/task_querylayout.jsp&c lasses=taskClientImpl&common=getInfoQue ryDate,通过这个URL执行时会提示service不存在,并跳转到错误页面,同时会弹出123信息的提示窗口,同时如果我们修改common参数也能达到这种效果

(五)解决方案

web.xml增加如下配置:

CROSS_DOMAIN_STR

<,>,%3C,%3E

Constans.java类增加如下变量:

/**

* 跨域特殊字符判断

*/

public static List CROSS_DOMAIN_STR = new ArrayList(); FriendOneServlet.java类增加initSafetyConf 安全初始化配置方法

private void initSafetyConf(){

Constans.CROSS_DOMAIN_STR.clear();

String crossDomainStr = getServletContext().getInitParameter("CROSS_DOMAIN_STR");

String[] crossDomainAry = crossDomainStr.split(",");

for(String s : crossDomainAry){

Constans.CROSS_DOMAIN_STR.add(s.trim());

}

Constans.LOGIN_ERROR_TIMES = getServletContext().getInitParameter("LOGIN_ERROR_TIMES"); Constans.LOGIN_ERROR_LOCK_SECOND = getServletContext().getInitParameter("LOGIN_ERROR_LOCK_SECOND"); https://www.360docs.net/doc/d613735638.html,(Constans.CROSS_DOMAIN_STR);

https://www.360docs.net/doc/d613735638.html,("LOGIN_ERROR_TIMES="+Constans.LOGIN_ERROR_TIMES); https://www.360docs.net/doc/d613735638.html,("LOGIN_ERROR_LOCK_SECOND="+Constans.LOGIN_ERROR_LOCK_S ECOND);

}

在init方法中直接调用

在ActionFilter.java类中增加checkCrossDomain 跨域特殊字符串检查,并在doFilter 中进行判断验证,如果存在特殊字符,则直接跳转到登陆界面

修改error.jsp,此处是用于处理返回的错误信息

目前是通过标签方式加载错误信息,此处可根据输入的条件来进行错误注入,执行js代码,修改该当如下:

一、将此错误标签通过textarea进行包装,错误信息是以文本方式显示,无法执行,如下:

同时修改BaseWebAction.java类的processError 方法,将sb.append(ste[i]).append("
"); 这段代码改为sb.append(ste[i]).append("\n");

二、无论返回什么错误信息,此处只显示“操作故障,请确认操作是否合法或联系管理员检查!”

启用了不安全的HTTP 方法

/*

PUT

DELETE

HEAD

OPTIONS

TRACE

SEARCH

COPY

MOVE

PROPFIND

PROPPATCH

MKCOL

LOCK

UNLOCK

BASIC

1.3.5已解密的登录请求

(一)URL

http://10.149.113.200/loginAction.do

(二)安全问题描述

用户登录密码为明文

(三)攻击方法

可通过http报文截取登录用户密码

(四)安全规范要求

发送敏感信息时,始终使用SSL 和HTTP POST 方法

(五)解决方案

修改server.xml

port="8443" minSpareThreads="5" maxSpareThreads="75"

enableLookups="true" disableUploadTimeout="true"

acceptCount="100" maxThreads="200"

scheme="https" secure="true" SSLEnabled="true"

clientAuth="false" sslProtocol="TLS"

keystoreFile="D:/apache-tomcat-6.0.18/server.keystore"

keystorePass="friendone"/>

标红的地方注意,要与附件中server.keystore存放的位置一致

标蓝的8443要注意,外网的一律全用443端口,BOSS网系统还是全用8443端口。

修改web.xml,在welcome-file-list后面增加如下配置

CLIENT-CERT

Client Cert Users-only Area

BASIC

SSL

/*/oa/login.jsp为应用登录URL,此为公司OA则为此串*/

/oa/login.jsp

CONFIDENTIAL

fortune

/*

PUT

DELETE

HEAD

OPTIONS

TRACE

增加初始化变量:

HTTP_URI

8080

此为从https转到http时的跳转值,为应用部署服务器IP地址为端口

LoginAction.java修改如下:

Login方法修改如下:

String requesturl = request.getRequestURL().toString();

requesturl = requesturl.substring(requesturl.indexOf("//") + 2);

requesturl = requesturl.substring(0,

requesturl.indexOf(":"));

response.sendRedirect("http://"+requesturl+":"+Constans.HTTP_UR I+request.getContextPath()+"/loginAction.do?method=flogin&sessi onid="+session.getId());

returnnull;

// clearTempFile();

//return new ActionForward("/"+Constans.PROJECT_NAME+"/frames/indexFrame.jsp");

增加以下方法:

public ActionForward flogin(ActionMapping mapping,ActionForm

form,HttpServletRequest request,HttpServletResponse response) throws Exception{

try{

String value = request.getParameter("sessionid");

HashMap sessions = (HashMap)

request.getSession().getServletContext().getAttribute("sessions");

HttpSession session = (HttpSession)sessions.get(value);

if(session != null){

HttpSession nsession = request.getSession();

nsession.setAttribute(Constans.LOGIN_USER,session.getAttribute(Con stans.

session = null;

}

returnnew

ActionForward("/"+Constans.PROJECT_NAME+"/frames/indexFrame.jsp");

}catch(Exception e){

logger.error("LoginAction Exception Error:"+e.toString());

throw e;

}

}

修改LoginAction.java类的systemLogout方法:

String requesturl = request.getRequestURL().toString();

requesturl = requesturl.substring(requesturl.indexOf("//") +

2);

requesturl = requesturl.substring(0, requesturl.indexOf(":"));

response.sendRedirect("http://"+requesturl+":"+Constans.HTT P_URI+request.getContextPath()+LOGINPAGE);

return null;

// return new ActionForward(LOGINPAGE);

1.3.6跨站点脚本编制

(一)URL

http://10.149.113.200/callAction.do

http://10.149.113.200/loginAction.do

(二)安全问题描述

“跨站点脚本编制”攻击是一种隐私违例,可让攻击者获取合法用户的凭证,并在与特定Web 站点交互时假冒这位用户。

这个攻击立足于下列事实:Web 站点中所包含的脚本直接将用户在HTML 页面中的输入(通常是参数值)返回,而不预先加以清理。如果脚本在响应页面中返回由JavaScript 代码组成的输入,浏览器便可以执行此输入。因此,有可能形成指向站点的若干链接,且其中一个参数包含恶意的JavaScript 代码。该代码将在站点上下文中(由用户浏览器)执行,这使得该代码有权访问用户在该站点中具有访问权的cookie,以及站点中其他可通过用户浏览器访问的窗口。

攻击依照下列方式继续进行:攻击者诱惑合法用户单击攻击者生成的链接。用户单击该链接时,便会生成对于Web 站点的请求,其中的参数值含有恶意的JavaScript 代码。如果Web 站点将这个参数值嵌入在响应的HTML 页面中(这正是站点问题的本质所在),恶意代码便会在用户浏览器中运行。

(三)攻击方法

A. 在响应页面中,返回发送给CGI 脚本的参数值,嵌入在HTML 中。

例如:[请求]

GET /cgi-bin/script.pl?name=JSmith HTTP/1.0

[响应]

HTTP/1.1 200 OK

Server: SomeServer

Date: Sun, 01 Jan 2002 00:31:19 GMT

Content-Type: text/html

Accept-Ranges: bytes

Content-Length: 27

Hello JSmith

B. 在HTML 参数值上下文中,返回发送给CGI 脚本的参数值。

例如:[请求]

GET /cgi-bin/script.pl?name=JSmith HTTP/1.0

[响应] HTTP/1.1 200 OK Server: SomeServer Date: Sun, 01 Jan 2002 00:31:19 GMT Content-Type:

text/html Accept-Ranges: bytes Content-Length: 254

Please fill in your zip code:



(四)安全规范要求

通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,

例如:启动任意SQL 查询、嵌入将在客户端执行的Javascript 代码、运行各种操作系统命令,

等等。

建议过滤出所有以下字符:

[1] |(竖线符号)

[2] &(&符号)

[3];(分号)

[4] $(美元符号)

[5] %(百分比符号)

[6] @(at 符号)

[7] '(单引号)

[8] "(引号)

[9] \'(反斜杠转义单引号)

[10] \"(反斜杠转义引号)

[11] <>(尖括号)

[12] ()(括号)

[13] +(加号)

[14] CR(回车符,ASCII 0x0d)

[15] LF(换行,ASCII 0x0a)

[16] ,(逗号)

[17] \(反斜杠)

(五)解决方案

LoginImpl.java类中的getLoginInfo 方法,将之前的操作员工号与密码拼接方式改成SQL变量绑定方式

StringBuffer sqlbuf = new StringBuffer();

sqlbuf.append("SELECT .orgcode,https://www.360docs.net/doc/d613735638.html,erid,https://www.360docs.net/doc/d613735638.html,ername,A.password,A.va lidate,https://www.360docs.net/doc/d613735638.html,ertype,https://www.360docs.net/doc/d613735638.html,name,C.norgcode,https://www.360docs.net/doc/d613735638.html,type,");

sqlbuf.append(" now() AS logindate,sp_genseqfunc('S','D') AS

sessionid,");

sqlbuf.append(" (SELECT GROUP_CONCAT(B.datatype) FROM tb_userdatarel

B WHERE https://www.360docs.net/doc/d613735638.html,erid = ?) AS datatypes ,PASSWORD(?)=A.password AS

pwdiscorrect");

sqlbuf.append(" FROM tb_user A,tb_organization C");

sqlbuf.append(" WHERE https://www.360docs.net/doc/d613735638.html,erid = ? AND A.effdate <= CURDATE() AND

A.expdate >= CURDATE() AND https://www.360docs.net/doc/d613735638.html,code = https://www.360docs.net/doc/d613735638.html,code");

web.xml增加如下配置:

CROSS_DOMAIN_STR

<,>,%3C,%3E

GET_CROSS_DOMAIN_STR

<,>,",',%,;,(,),&,+,HTTP,http,%0a

Constans.java类增加如下变量:

/**

* 跨域特殊字符判断

*/

public static List CROSS_DOMAIN_STR = new

ArrayList();

public static List GET_CROSS_DOMAIN_STR = new ArrayList();

FriendOneServlet.java类增加initSafetyConf 安全初始化配置方法

private void initSafetyConf(){

Constans.CROSS_DOMAIN_STR.clear();

String crossDomainStr = getServletContext().getInitParameter("CROSS_DOMAIN_STR");

String[] crossDomainAry = crossDomainStr.split(",");

for(String s : crossDomainAry){

Constans.CROSS_DOMAIN_STR.add(s.trim());

}

crossDomainStr = getServletContext().getInitParameter("GET_CROSS_DOMAIN_STR"); crossDomainAry = crossDomainStr.split(",");

for(String s : crossDomainAry){

Constans.GET_CROSS_DOMAIN_STR.add(s.trim());

}

Constans.LOGIN_ERROR_TIMES = getServletContext().getInitParameter("LOGIN_ERROR_TIMES");

Constans.LOGIN_ERROR_LOCK_SECOND = getServletContext().getInitParameter("LOGIN_ERROR_LOCK_SECOND") ;

Constans.HTTP_URI = getServletContext().getInitParameter("HTTP_URI");

https://www.360docs.net/doc/d613735638.html,(Constans.CROSS_DOMAIN_STR);

https://www.360docs.net/doc/d613735638.html,("LOGIN_ERROR_TIMES="+Constans.LOGIN_ERROR_TIMES );

https://www.360docs.net/doc/d613735638.html,("LOGIN_ERROR_LOCK_SECOND="+Constans.LOGIN_ERROR

_LOCK_SECOND);

https://www.360docs.net/doc/d613735638.html,("HTTP_URI="+Constans.HTTP_URI);

}

在init方法中直接调用

在ActionFilter.java类中增加checkCrossDomain 跨域特殊字符串检查,并在doFilter 中进行判断验证,如果存在特殊字符,则直接跳转到登陆界面修改error.jsp,此处是用于处理返回的错误信息

目前是通过标签方式加载错误信息,此处可根据输入的条件来进行错误注入,执行js代码,修改该当如下:

一、将此错误标签通过textarea进行包装,错误信息是以文本方式显示,无法执

行,如下:

同时修改BaseWebAction.java类的processError 方法,将sb.append(ste[i]).append("
"); 这段代码改为sb.append(ste[i]).append("\n");

二、无论返回什么错误信息,此处只显示“操作故障,请确认操作是否合法或联系

管理员检查!”

1.3.7通过框架钓鱼

(一)URL

http://10.149.113.200/callAction.do

(二)安全问题描述

网络钓鱼是一个通称,代表试图欺骗用户交出私人信息,以便电子欺骗身份。

攻击者有可能注入frame 或iframe 标记,其中含有类似受攻击之网站的恶意属性。不小心的用户有可能浏览它,但并不知道他正在离开原始网站,冲浪到恶意的网站。

之后,攻击者便可以诱惑用户重新登录,然后获取他的登录凭证。

(三)攻击方法

伪造的网站嵌入在原始网站中,这个情况对攻击者有帮助,因为他的网络钓鱼企图会披上更可信赖的外表。

利用的样本:

如果参数值未经适当清理便反映在响应中,那么下列请求:http://[SERVER]/script.aspx?parameter=

src="https://www.360docs.net/doc/d613735638.html,">会使响应含有通往这个邪恶站点的框架。

(四)安全规范要求

若干问题的补救方法在于对用户输入进行清理。

通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,

例如:启动任意SQL 查询、嵌入将在客户端执行的Javascript 代码、运行各种操作系统命令,

等等。

建议过滤出所有以下字符:

[1] |(竖线符号)

[2] &(&符号)

[3];(分号)

[4] $(美元符号)

[5] %(百分比符号)

[6] @(at 符号)

[7] '(单引号)

[8] "(引号)

[9] \'(反斜杠转义单引号)

[10] \"(反斜杠转义引号)

2012-7-4 16:57:34 154/187

[11] <>(尖括号)

[12] ()(括号)

[13] +(加号)

[14] CR(回车符,ASCII 0x0d)

[15] LF(换行,ASCII 0x0a)

[16] ,(逗号)

[17] \(反斜杠)

以下部分描述各种问题、问题的修订建议以及可能触发这些问题的危险字符:

SQL 注入和SQL 盲注:

A. 确保用户输入的值和类型(如Integer、Date 等)有效,且符合应用程序预期。

B. 利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。当使用存储过程时,请利

用ADO 命令对象来实施它们,以强化变量类型。

C. 清理输入以排除上下文更改符号,例如:

[1] '(单引号)

[2] "(引号)

[3] \'(反斜线转义单引号)

[4] \"(反斜杠转义引号)

[6] ;(分号)

跨站点脚本编制:

A. 清理用户输入,并过滤出JavaScript 代码。我们建议您过滤下列字符:

[1] <>(尖括号)

[2] "(引号)

[3] '(单引号)

[4] %(百分比符号)

[5] ;(分号)

[6] ()(括号)

[7] &(&符号)

[8] +(加号)

B. 如果要修订<%00script>变体,请参阅MS 文章 821349

C. 对于UTF-7 攻击: [-] 可能的话,建议您施行特定字符集编码(使用'Content-Type' 头或

标记)。

HTTP 响应分割:清理用户输入(至少是稍后嵌入在HTTP 响应中的输入)。

请确保输入未包含恶意的字符,例如:

[1] CR(回车符,ASCII 0x0d)

[2] LF(换行,ASCII 0x0a)远程命令执行:清理输入以排除对执行操作系统命令有意义的符

号,例如:

[1] |(竖线符号)

[2] &(&符号)

[3];(分号)

执行shell 命令:

A. 绝不将未检查的用户输入传递给eval()、open()、sysopen()、system() 之类的Perl 命令。

B. 确保输入未包含恶意的字符,例如:

[1] $(美元符号)

[2] %(百分比符号)

[3] @(at 符号)

XPath 注入:清理输入以排除上下文更改符号,例如:

[1] '(单引号)

LDAP 注入:

A. 使用正面验证。字母数字过滤(A..Z,a..z,0..9)适合大部分LDAP 查询。

B. 应该过滤出或进行转义的特殊LDAP 字符:

2012-7-4 16:57:34 155/187

[1] 在字符串开头的空格或“#”字符

[2] 在字符串结尾的空格字符

[3] ,(逗号)

[4] +(加号)

[5] "(引号)

[6] \(反斜杠)

[7] <>(尖括号)

[8] ;(分号)

[9] ()(括号)

MX 注入:

应该过滤出特殊MX 字符:

[1] CR(回车符,ASCII 0x0d)

[2] LF(换行,ASCII 0x0a)记录伪造:

应该过滤出特殊记录字符:

[1] CR(回车符,ASCII 0x0d)

[2] LF(换行,ASCII 0x0a)

[3] BS(退格,ASCII 0x08)

ORM 注入:

A. 确保用户输入的值和类型(如Integer、Date 等)有效,且符合应用程序预期。

B. 利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。

C. 使用参数化查询API

D. 清理输入以排除上下文更改符号,例如: (*):

[1] '(单引号)

[2] "(引号)

[3] \'(反斜线转义单引号)

[4] \"(反斜杠转义引号)

[5] )(结束括号)

[6] ;(分号)

系统漏洞修复之浅见

系统漏洞修复之浅见 我我瞎折腾的一点经验,大家互相学习,敬请高手指教。 什么是Windows安全漏洞?微软官方定义是:使用者在合理配置了产品的条件下,由于产品自身存在的缺陷,产品的运行可能被改变以产生非设计者预期的后果,并以最终导致安全性被破坏的问题,包括使用者系统被非法侵占、数据被非法访问并泄露,或系统拒绝服务等。事实上,目前多数的病毒和木马,都是利用了各种系统安全漏洞(包括一些应用软件中的漏洞)来进行传播和对用户攻击。 世界上没有百分百完美的软件和程序,任何软件和程序都免不了会出现各种各样的漏洞。那么,我们该如何来避免系统安全漏洞所带来的风险呢?最简单的办法就是在第一时间修复这些漏洞,这好比我们衣服破了要补一样。然而,给系统打补丁也是一门学问,千万不可盲目行事. 一、首先弄清自己的操作系统版本 无论是XP还是win7,均有多个版本,微软发布的系统补丁,同一种系统既有通用性的,也有分版本的,还有针对CPU不同的,因此,弄清自己系统的版本,才能有效选择适合自己系统补丁。 二、弄清是否原版还是修改版 如果是正版或者通过了正版验证的原版(未修改版)系统,选择系统自动更新修复漏洞是最合适不过的了,任何第三方工具均没有微软清楚自己的系统。如果是修改版,由于这类操作系统文件都曾被第

三方修改过,因此在安装从Windows Update下载来的微软官方补丁时,轻则安装失败,重则可能导致系统故障,例如出现电脑蓝屏、不断重启或无法进入“安全模式”等现象。这时候,本土化的第三方打补丁软件反而更加可靠。 三、合理运用第三方工具 本土化的第三方工具虽然为修改版的系统修复漏洞提高了便宜,但是,由于近年来恶性竞争,某些公司出于私利,往往会把一些你根本不需要的补丁提供给你,你不加选择地装上反而增加系统负担。如360安全卫士提示的win7系统高危漏洞KB978188和KB892316,都是我们普通用户不需要的。KB978188解决的是荷兰语版本Windows7MediaCenter的问题。KB982316是针对Windows 电话应用程序编程接口(TAPI) 的更新,此更新主要面向编程等技术人员,家庭用户一般可以不安装此更新。更有“KB3600018”之类的补丁,则是360的私货。因此,对扫描出来的漏洞,一定要查看描述,选择适合自己系统的进行智能修复。 四、修复失败不可怕 安装失败也许是补丁不适合你的操作系统环境,如win7的补丁不能打在xp;也许是你系统经过第三方修改,微软的部分官方补丁会失效;也许是不适合当前软件环境,如你没有安装微软的某个系统组件,对应的补丁自然打不上。安装失败干脆屏蔽,还可节约资源。 五、修改版系统安装补丁前最好先备份

最受欢迎的十大WEB应用安全评估系统

最受欢迎的十大WEB应用安全评估系统 在国内一些网站上经常看到文章说某某WEB应用安全评估工具排名,但是很可惜,绝大多数都是国外人搞的,界面是英文,操作也不方便,那游侠就在这里综合下,列举下国内WEB安全评估人员常用的一些工具。当然,毫无疑问的,几乎都是商业软件,并且为了描述更准确,游侠尽量摘取其官方网站的说明: 1.IBM Rational AppScan IBM公司推出的IBM Rational AppScan产品是业界领先的应用安全测试工具,曾以Watchfire AppScan 的名称享誉业界。Rational AppScan 可自动化Web 应用的安全漏洞评估工作,能扫描和检测所有常见的Web 应用安全漏洞,例如SQL 注入(SQL-injection)、跨站点脚本攻击(cross-site scripting)及缓冲溢出(buffer overflow)等方面安全漏洞的扫描。 游侠标注:AppScan不但可以对WEB进行安全评估,更重要的是导出的报表相当实用,也是国外产品中唯一可以导出中文报告的产品,并且可以生成各种法规遵从报告,如ISO 27001、OWASP 2007等。 2.HP WebInspect

目前,许多复杂的Web 应用程序全都基于新兴的Web 2.0 技术,HP WebInspect 可以对这些应用程序执行Web 应用程序安全测试和评估。HP WebInspect 可提供快速扫描功能、广泛的安全评估范围及准确的Web 应用程序安全扫描结果。 它可以识别很多传统扫描程序检测不到的安全漏洞。利用创新的评估技术,例如同步扫描和审核(simultaneous crawl and audit, SCA)及并发应用程序扫描,您可以快速而准确地自动执行Web 应用程序安全测试和Web 服务安全测试。 主要功能: ·利用创新的评估技术检查Web 服务及Web 应用程序的安全 ·自动执行Web 应用程序安全测试和评估 ·在整个生命周期中执行应用程序安全测试和协作 ·通过最先进的用户界面轻松运行交互式扫描 ·满足法律和规章符合性要求 ·利用高级工具(HP Security Toolkit)执行渗透测试 ·配置以支持任何Web 应用程序环境 游侠标注:毫无疑问的,WebInspect的扫描速度相当让人满意。 3.Acunetix Web Vulnerability Scanner

如何修补软件、系统漏洞

如何修补软件、系统漏洞? 北京李晨光 一、程序为什么会出错? 程序只能严格按照规则做编程有要它做的事情。但是,最终编写的程序并不总是与程序员预计让程序完成的事情一致。下面的这个笑话可以说明这一问题: 一个人在森林中行走,在地上发现了一盏魔灯。他本能地捡起了魔灯并且用袖子擦拭它。突然,从瓶子里出来了一个魔鬼。魔鬼感谢这个人使他获得了自由,并答应要满足他的三个愿望。这个人欣喜若狂,他确实知道自己想要什么。 “第一”,这个人说,“我想要十亿美元。” 魔鬼很快地晃了一下手指,满满的一袋子钱出现了。 这个人惊奇地睁大眼睛继续说道:“接下来,我想要一部法拉利。” 魔鬼一晃手指,很快地在烟雾中出现了一部法拉利。 这个人继续说:“最后,我想变得对女人有极大的诱惑力。” 魔鬼一挥手指,这个人变成了一盒巧克力。 正像这个人的最后一个愿望的实现是基于他的言语,而不是他的真实想法一样,程序按照指令执行,由于软件漏洞结果出了问题并不总是程序员想要的。有时结果甚至是灾难性的。我们都知道现在软件变得更加复杂,软件越复杂,就越难预测它在各种可能场景下的反应方式,也就越难保证其安全性,当今的操作系统和应用程序的代码行数也越来越多,例如Windows xp大约有4千万行代码,Vista 大约5千多万,Windows 2000有2900万行代码。业界通常使用这样的一个估算方式,即每1000行代码中大约有5~50个BUG。因此,从平均意义上能估计出Windows xp中大约有多少个BUG(只是理论上。)我们都知道黑客对操作系统的攻击都是利用系统软件中的漏洞进行的。那么我们怎么理解什么是漏洞呢?在过去,很多人把漏洞看作是有恶意的人能够利用的软件或硬件的缺陷。然而,在近几年中,漏洞的定义发展成为有恶意的人能够利用的软硬件的缺陷及配置错误。 我们知道了软件有漏洞如何来管理呢,从表面上看,漏洞管理像是个简单的工作。通常是在操作系统上装上一些常用的补丁修补工具,然后自动进行修补,不幸的是,在大部分组织的网络中,漏洞管理既困难又复杂。一个典型的组织中包含定制们有不同的需求,不能只做简单地保护,更不能置之不理。软件厂商仍会发布不安全的代码,硬件厂商也不会将安全内建在产品中,因此这些问题就留给了系统管理员来处理。加入这些必须遵守的规定使管理者感到紧张,并且处于一种高压状况下,容易导致犯严重的错误。 厂商通过不同的途径发现一个漏洞。在理想的情况下,厂商在发布产品之前,会找出并解决所有的安全问题。但是代码的复杂性,加上严格的开发周期,易于产生安全方面的错误。通常一个独立的或商业的安全研究组织会将漏洞告知厂商,并且在有些情况下,厂商会与公众同时发现漏洞,这时不用事先通知,漏洞就被公开了(这时候就会被利用啊)。 二、如何理解漏洞造成的风险? 不管一个漏洞是如何公开的,该漏洞都对一个组织造成了风险。漏洞带来的风险大小取决于几个因素:厂商对风险的评级、组织中受影响系统的数量、受影响系统的危险程度和暴露程度。比如一个大的银行机构采取措施把所有的金融核算系统都放在网络中,并且置于独立的防火墙之后。尽管分离重要的系统是一种很好的策略,但是有一个因素没有考恕到有大量的员工需要访问这些数据。因此,实际拥有的只是一个用作昂贵钓日志系统的防火墙,该防火墙允许一部分客户端通过。当然,防火墙可以阻止一些威胁,但是如果威胁来自一个允

浅谈WEB应用安全问题及防范

浅谈WEB应用安全问题及防范 随着WEB应用技术的发展,越来越多的企业或学校使用WEB应用来进行企业或学校信息开放性管理,使机构管理信息暴露在越来越多的威胁中。由于WEB应用具有一定的运行特点,传统防火墙对于其存在的安全问题缺少针对性和有效性,新的防护工具——Web应用防火墙应运而生。 标签:web应用开放性安全问题Web防火墙 随着信息资源逐渐向数据高度集中的模式,Web成为一种普适平台,Web 应用成为了越来越多的企业或学校进行核心业务及信息管理的承载者。Web应用提供了丰富的开放资源和高效率的新工作方式,但它的开放性、易用性和易开发性同样也使Web应用的安全问题日益突出,已成为了网络安全核心问题之一。 1 Web应用的工作原理和特点 Web应用程序首先是“应用程序”,和用标准的程序语言,如C、C++等编写出来的程序没有什么本质上的不同。然而Web应用程序又有自己独特的地方,就是它是基于Web的,而不是采用传统方法运行的。 目前广泛使用的Web应用程序一般是B/S模式,使用标准的三层架构模型:第一层是客户端;使用动态Web内容技术的部分属于中间层;数据库是第三层。在B/S模式中,客户端运行浏览器软件。浏览器以超文本形式向Web服务器提出访问数据库的要求,Web服务器接受客户端请求后,将这个请求转化为SQL 语法,并交给数据库服务器,数据库服务器得到请求后,验证其合法性,并进行数据处理,然后将处理后的结果返回给Web服务器,Web服务器再一次将得到的所有结果进行转化,变成HTML文档形式,转发给客户端浏览器以友好的Web 页面形式显示出来。 因此,Web应用具有以下特点: 1.1 易用性 Web应用所基于的Web浏览器的界面都很相似,对于无用户交互功能的页面,用户接触的界面都是一致的,因此Web应用的操作简单易上手。 1.2 开放性 在Web应用的B/S模式下,除了内部人员可以访问,外部的用户亦可通过通用的浏览器进行访问,并且不受浏览器的限制。 1.3 易扩展性

WEB开发安全漏洞修复方案

密级:保密 WEB开发安全漏洞修复方案 () 文档编号:文档名称:WEB开发安全漏洞修复方案编写:审核: 批准:批准日期: 技术研究部

文档修订记录

() (1) 1.1背景 (1) 1.2FSDP安全漏洞清单 (1) 1.3安全漏洞修复方案 (1) 1.3.1会话标识未更新 (1) 1.3.2已解密的登录请求 (4) 1.3.3通过框架钓鱼 (11) 1.3.4链接注入(便于跨站请求伪造) (18) 1.3.5应用程序错误 (26) 1.3.6SQL注入 (29) 1.3.7发现数据库错误模式 (40) 1.3.8启用了不安全的HTTP方法 (51) 1.3.9发现电子邮件地址模式 (54) 1.3.10HTML注释敏感信息泄露 (54) 1.3.11发现内部IP泄露模式 (55) 1.3.12主机允许从任何域进行flash访问 (56) 1.3.13主机应用软件漏洞修复 (57) 1.3.14目录列表 (58) 1.3.15跨站点请求伪造 (59) 1.1需要注意的问题 (60) 1.2用户锁定解锁功能 (60)

1.1背景 随着移动公司对信息安全的进一步加强,要求我们部署的系统必须满足安全扫描要求。本文档描述了安徽移动对FSDP安全扫描的漏洞的解决方案,并作为WEB开发的安全编程规范。 1.2FSDP安全漏洞清单 见《WEB开发安全漏洞清单.xlsx》 1.3安全漏洞修复方案 1.3.1会话标识未更新 (一)URL (二)安全问题描述 根据WASC:“会话固定”是一种攻击技术,会强制用户的会话标识变成显式值。固定会话标识值的技术有许多种,会随着目标Web 站点的功能而不同。从利用“跨站点脚本编 制”到向Web 站点密集发出先前生成的HTTP 请求,都在这些技术范围内。用户的会话标识固定之后,攻击者会等待用户登录,然后利用预定义的会话标识值来假定用户的联机身份。(三)攻击方法 登录过程前后会话标识的比较,显示它们并未更新,这表示有可能伪装用户。初步得知会话标识值后,远程攻击者有可能得以充当已登录的合法用户。 任何时候,只要一名用户与应用程序的交互状态由匿名转变为确认,应用程序就应该发布一个新的会话令牌。这不仅适用于用户成功登录的情况,而且适用于匿名用户首次提交个人或其他敏感信息时。 (四)安全规范要求 COOKIE中的登陆前JSESSIONID与登陆后JESSIONID不能相同。(只有J2EE应用服务器为JESSIONID,其他应用服务器可能不同) (五)解决方案 将如下代码加入到登陆页面()的最后行: <%

五个常见的Web应用漏洞及其解决方法

五个常见的Web应用漏洞及其解决方法开放Web应用安全项目(OW ASP)很快会发布今年的10大Web应用安全漏洞清单。这个清单与去年并没有太大差别,这表明负责应用设计与开发的人仍然没能解决以前那些显而易见的错误。许多最常见的Web应用漏洞仍然广泛存在,许多恶意软件搜索和攻击这些漏洞,连黑客新手都能轻松做到。 本文介绍了5个最常见的Web应用漏洞,以及企业该如何修复初级问题,对抗那些针对这些漏洞的攻击。 注入攻击和跨站脚本攻击 Web应用主要有2种最常见的严重缺陷。首先是各种形式的注入攻击,其中包括SQL、操作系统、电子邮件和LDAP注入,它们的攻击方式都是在发给应用的命令或查询中夹带恶意数据。别有用心的数据可以让应用执行一些恶意命令或访问未授权数据。如果网站使用用户数据生成SQL查询,而不检查用户数据的合法性,那么攻击者就可能执行SQL注入。这样攻击者就可以直接向数据库提交恶意SQL查询和传输命令。举例来说,索尼的PlayStation 数据库就曾经遭遇过SQL注入攻击,并植入未授权代码。 跨站脚本(XSS)攻击会将客户端脚本代码(如JavaScript)注入到Web应用的输出中,从而攻击应用的用户。只要访问受攻击的输出或页面,浏览器就会执行代码,让攻击者劫持用户会话,将用户重定向到一个恶意站点或者破坏网页显示效果。XSS攻击很可能出现在动态生成的页面内容中,通常应用会接受用户提供的数据而没有正确验证或转码。 为了防御注入攻击和XSS攻击,应用程序应该配置为假定所有数据——无论是来自表单、URL、Cookie或应用的数据库,都是不可信来源。要检查所有处理用户提供数据的代码,保证它是有效的。验证函数需要清理所有可能有恶意作用的字符或字符串,然后再将它传给脚本和数据库。要检查输入数据的类型、长度、格式和范围。开发者应该使用现有的安全控制库,如OW ASP的企业安全API或微软的反跨站脚本攻击库,而不要自行编写验证代码。此外,一定要检查所有从客户端接受的值,进行过滤和编码,然后再传回给用户。 身份验证和会话管理被攻破 Web应用程序必须处理用户验证,并建立会话跟踪每一个用户请求,因为HTTP本身不具备这个功能。除非任何时候所有的身份验证信息和会话身份标识都进行加密,保证不受其他缺陷(如XSS)的攻击,否则攻击者就有可能劫持一个激活的会话,伪装成某个用户的身份。如果一个攻击者发现某个原始用户未注销的会话(路过攻击),那么所有帐号管理功能和事务都必须重新验证,即使用户有一个有效的会话ID。此外,在重要的事务中还应该考虑使用双因子身份验证。 为了发现身份验证和会话管理问题,企业要以执行代码检查和渗透测试。开发者可以使用自动化代码和漏洞扫描程序,发现潜在的安全问题。有一些地方通常需要特别注意,其中包括会话身份标识的处理方式和用户修改用户身份信息的方法。如果没有预算购买商业版本,那么也可以使用许多开源和简化版本软件,它们可以发现一些需要更仔细检查的代码或进程。

windows系统漏洞怎么修复

Windows系统是大都数电脑所运用的系统,该系统相对稳定,操作简单,但也不时的存在漏洞,我们需要及时的发现和处理漏洞,才能使得电脑继续正常的运行,Windows 系统漏洞怎么修复呢? 大多数小型企业和个人网站采用直接租用网页空间的形式来架设网站,而网站的拥有者并无操作系统的控制权限,无法通过操作系统层面来进行网站的安全防御,由于各种各样的原因,大多网站并未经过专业的网站安全人员进行审核、测试,因此,小型企业(个人)网站安全隐患非常多,经常会成为网络犯罪的受害者,会造成:网站客户流失、访问量骤减、被屏蔽或列入黑名单 如果出现这种情况,对网站经营者的经济利益影响巨大。为保证这些网站经营者的利益,铱迅信息推出Web网站安全解决方案套餐:网站安全检测与评估、网站代码审计、网站代码安全加固、网站漏洞修补、网站安全维护 从而解决了小型企业(个人)网站安全的后顾之忧,并且每个网站的运营商可根据自身网站的特点来选择不同的服务项目,达到节约开支的目的,本方案的套餐如下: 序号服务项目备注 1评估专业化网站安全检测,给出检测报告。并给出漏洞的种类。包括: 1、系统漏洞(拒绝服务、远程溢出) 2、软件漏洞(拒绝服务、远程溢出) 3、脚本漏洞(SQL注入、XSS等) 4、数据库漏洞(弱口令等) 2SQL注入漏洞修补通用型SQL注入漏洞修补,能防御绝大部分已知的SQL注入攻击 3专业型SQL注入漏洞修补由网安专家,专门针对网站特点、编码结构进行针对性的SQL注入漏洞修补,能防住所有已知的SQL注入攻击和部分未知SQL注入攻击 1、对网站结构进行局部调整 2、修改数据查询方式为安全访问 3、对可能的信息泄露进行补救 4网站漏洞代码审查与修复对网站的代码进行系统审查,检查代码的漏洞,并进行修复,包括: 1、SQL注入漏洞

常见WEB安全漏洞及整改建议

常见WEB安全漏洞及整改建议 1. HTML表单没有CSRF保护 1.1 问题描述: CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。 CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。 1.2 整改建议: CSRF的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的CSRF防御也都在服务端进行。有以下三种方法: (1).Cookie Hashing(所有表单都包含同一个伪随机值): (2).验证码 (3).One-Time Tokens(不同的表单包含一个不同的伪随机值) 1.3 案例: 1.服务端进行CSRF防御 服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。 1.3.1 Cookie Hashing(所有表单都包含同一个伪随机值): 这可能是最简单的解决方案了,因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败.

//构造加密的Cookie信息 $value = “DefenseSCRF”; setcookie(”cookie”, $value, time()+3600); ?> 在表单里增加Hash值,以认证这确实是用户发送的请求。 $hash = md5($_COOKIE['cookie']); ?> ”> 然后在服务器端进行Hash值验证 if(isset($_POST['check'])) { $hash = md5($_COOKIE['cookie']); if($_POST['check'] == $hash) { doJob(); } else {

十大常见漏洞

Web应用常见的安全漏洞有哪些 随着存在安全隐患的Web应用程序数量的骤增,Open Web Application Security Project (开放式Web应用程序安全项目,缩写为OWASP)总结出了现有Web应用程序在安全方面常见的十大漏洞,以提醒企业及其程序开发人员尽量避免它们给企业IT系统带来的安全风险: 一、非法输入 Unvalidated Input 在数据被输入程序前忽略对数据合法性的检验是一个常见的编程漏洞。随着OWASP对Web应用程序脆弱性的调查,非法输入的问题已成为大多数Web应用程序安全漏洞方面的一个普遍现象。 二、失效的访问控制 Broken Access Control 大部分企业都非常关注对已经建立的连接进行控制,但是,允许一个特定的字符串输入可以让攻击行为绕过企业的控制。 三、失效的账户和线程管理 Broken Authentication and Session Management 有良好的访问控制并不意味着万事大吉,企业还应该保护用户的密码、会话令牌、

账户列表及其它任何可为攻击者提供有利信息、能帮助他们攻击企业网络的内容。 四、跨站点脚本攻击 XSS 跨站漏洞以及钓鱼式攻击 XSS,中文名称为跨站脚本,是一种很常见的脚本漏洞。因为跨站脚本攻击不能直接对系统进行攻击,所以往往被人们忽视。 由于WEB应用程序没有对用户的输入进行严格的过滤和转换,就导致在返回页面中可能嵌入恶意代码。远程攻击者可以利用这些漏洞在用户浏览器会话中执行任意HTML和脚本代码。跨站脚本执行漏洞的攻击效果需要借助第三方网站来显现,此这种攻击能在一定程度上隐藏身份。 由于跨站脚本不能直接对系统进行攻击,所以跨站脚本总是伴随社会工程学来 实现攻击的,这种攻击的主要表现形式是钓鱼式攻击。钓鱼式攻击方式有很多,如获取Cookie, 伪造页面,屏蔽页面特定信息,与其它漏洞结合攻击操作系统等等。钓鱼式攻击是针对人脑的攻击方式,它的传播手段有EMAIL、IM、聊天室、恶意连接、游戏中的聊天系统,凡是能实现用户之间互动操作的系统都存在钓鱼式攻击的风险。 在电子商务蓬勃发展的今天,针对个人财务信息的钓鱼攻击事件数量成直线上升,其中一个主要攻击途径就是跨站脚本执行漏洞。据统计,国内外存在跨站脚本漏洞的网站多达60%, 其中包括许多大型知名网站。 这是一种常见的攻击,当攻击脚本被嵌入企业的Web页面或其它可以访问的Web 资源中,没有保护能力的台式机访问这个页面或资源时,脚本就会被启动,这种攻击可以影响企业内成百上千员工的终端电脑。 网站开发者角度,如何防护XSS攻击? 对XSS最佳的防护应该结合以下两种方法:验证所有输入数据,有效检 测攻击;对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。 网站用户角度,如何防护XSS攻击? 当你打开一封Email或附件、浏览论坛帖子时,可能恶意脚本会自动执行,因此,在做这些操作时一定要特别谨慎。建议在浏览器设置中关闭

常见安全漏洞的处理及解决方法

相关名词解释、危害与整改建议 1、网站暗链 名词解释 “暗链”就是看不见的网站链接,“暗链”在网站中的链接做的非常隐蔽,短时间内不易被搜索引擎察觉。它和友情链接有相似之处,可以有效地提高PR值。但要注意一点PR值是对单独页面,而不是整个网站。 危害: 网站被恶意攻击者插入大量暗链,将会被搜索引擎惩罚,降低权重值;被插入大量恶意链接将会对网站访问者造成不良影响;将会协助恶意网站(可能为钓鱼网站、反动网站、赌博网站等)提高搜索引擎网站排名。可被插入暗链的网页也意味着能被篡改页面内容。 整改建议: 加强网站程序安全检测,及时修补网站漏洞; 对网站代码进行一次全面检测,查看是否有其余恶意程序存在; 建议重新安装服务器及程序源码,防止无法到检测深度隐藏的恶意程序,导致重新安装系统后攻击者仍可利用后门进入。 2、网页挂马 名词解释 网页挂马是通过在网页中嵌入恶意程序或链接,致使用户计算机在访问该页面时触发执行恶意脚本,从而在不知情的情况下跳转至“放马

站点”(指存放恶意程序的网络地址,可以为域名,也可以直接使用IP地址),下载并执行恶意程序。 危害: 利用IE浏览器漏洞,让IE在后台自动下载黑客放置在网站上的木马并运行(安装)这个木马,即这个网页能下载木马到本地并运行(安装)下载到本地电脑上的木马,整个过程都在后台运行,用户一旦打开这个网页,下载过程和运行(安装)过程就自动开始,从而实现控制访问者电脑或安装恶意软件的目的。 整改建议: 加强网站程序安全检测,及时修补网站漏洞; 对网站代码进行一次全面检测,查看是否有其余恶意程序存在; 建议重新安装服务器及程序源码,防止有深度隐藏的恶意程序无法检测到,导致重新安装系统后攻击者仍可利用后门进入。 3、SQL注入 名词解释 SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL 命令。 危害: 可能会查看、修改或删除数据库条目和表。严重的注入漏洞还可能以当然数据库用户身份远程执行操作系统命令。

WEB应用漏洞及修复汇总

WEB应用漏洞及修复汇总 1.SQL注入 风险等级:高危 漏洞描述: SQL注入漏洞产生的原因是网站应用程序在编写时未对用户提交至服务器的数据进行合法性校验,即没有进行有效地特殊字符过滤,导致网站服务器存在安全风险,这就是SQL Injection,即SQL注入漏洞。 漏洞危害: 机密数据被窃取; 核心业务数据被篡改; 网页被篡改; 数据库所在服务器被攻击从而变为傀儡主机,导致局域网(内网)被入侵。 修复建议: 在网页代码中对用户输入的数据进行严格过滤;(代码层) 部署Web应用防火墙;(设备层) 对数据库操作进行监控。(数据库层) 代码层最佳防御sql漏洞方案: 采用sql语句预编译和绑定变量,是防御sql注入的最佳方法。 原因: 采用了PreparedStatement,就会将sql语句:"select id, no from user where id=?" 预先编译好,也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该sql 语句的语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql命令,比如select ,from ,where ,and, or ,order by 等等。所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行了,因为这些sql命令的执行,必须先的通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的,只会被当做字符串字面值参数,所以sql语句预编译可以防御sql注入。

其他防御方式: 正则过滤 2.目录遍历 风险等级:中危 漏洞描述: 通过该漏洞可以获取系统文件及服务器的配置文件。利用服务器API、文件标准权限进行攻击。 漏洞危害: 黑客可获得服务器上的文件目录结构,从而下载敏感文件。 修复建议: 1.通过修改配置文件,去除中间件(如IIS、apache、tomcat)的文件目录索引功能 2.设置目录权限 3.在每个目录下创建一个空的index.html页面。 3.跨站脚本 即XSS漏洞,利用跨站脚本漏洞可以在网站中插入任意代码,它能够获取网站管理员或普通用户的cookie,隐蔽运行网页木马,甚至格式化浏览者的硬盘。 漏洞危害: 网络钓鱼,盗取管理员或用户帐号和隐私信息等; 劫持合法用户会话,利用管理员身份进行恶意操作,篡改页面内容、进一步渗透网站; 网页挂马、传播跨站脚本蠕虫等; 控制受害者机器向其他系统发起攻击。 修复建议: 设置httponly httponly无法完全的防御xss漏洞,它只是规定了不能使用js去获取cookie 的内容,因此它只能防御利用xss进行cookie劫持的问题。Httponly是在

常见安全漏洞和解决方案

1.1身份认证安全 1.1.1弱密码 ●密码长度6个字符以上 ●密码字符必须包含大写字母、小写字母和数字,并进行密码复杂度检查 ●强制定期更换密码 1.1.2密码存储安全 密码存储必须使用单向加密 单纯的md5,sha1容易被破解,需要添加随机的盐值salt 涉及支付及财产安全的需要更高的安全措施,单纯的密码加密已经不能解决问题。 可以考虑手机验证码、数字证书、指纹验证。 1.1.3密码传输安全 1.1.3.1密码前端加密 用户名、密码传输过程对称加密,可以使用密钥对的对称加密,前端使用公钥加密,后端使用私钥解密。 前端加密示例

注意:前端密码加密如果还用了md5加密的,先md5加密再rsa加密。 后端解密,省略了其他验证步骤 1.1.3.2启用https协议 登录页面、支付页面等高危页面强制https协议访问。 前端加密和https可以结合使用 1.2SQL注入 1.2.1描述 SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应

用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。 1.2.2解决办法 1.养成编程习惯,检查用户输入,最大限度的限制用户输入字符集合。 2.不要把没有检查的用户输入直接拼接到SQL语句中,断绝SQL注入的注入点。 ●SQL中动态参数全部使用占位符方式传参数。 正确 ●如果不能使用占位符的地方一定要检查SQL中的特殊符号和关键字,或者启用用户输 入白名单,只有列表包含的输入才拼接到SQL中,其他的输入不可以。 1.2.3应急解决方案 nginx 过滤规则naxsi模块

常见漏洞以及修复方法

常见漏洞以及修复方法 文:政府事业本部第一事业部劳动人事开发部刘世涛

目录 (一)前言 (3) (二)常见漏洞及原理分析 (3) 1.sql脚本注入 (3) 2.跨站点脚本编制 (3) 3.不安全的HTTP方法及登录验证相关 (4) 4.跨站点请求伪造 (4) 5.危险性较低的开发及配置问题 (4) (三)系统防御原理 (5) 1.sql脚本注入 (5) 2.跨站点脚本编制 (5) 3.不安全的HTTP方法及登录验证相关 (6) 4.跨站点请求伪造 (6) 5.危险性较低的开发及配置问题 (6) (四)结语 (7)

(一)前言 在做互联网的项目中,由于网络用户数量大、环境更加复杂,对系统安全的考虑要更加慎重和全面。我在部门中参与了多个互联网项目,以此为基础,并结合IBM AppScan安全工具,介绍一下我们遇到的几个安全方面的问题及其原理和解决方案。 我们的项目使用的技术主要包括:spring、spring MVC、freemarker、hibernate。 本文主要站在软件系统的构建者和开发者的角度出发,类似网络环境、服务器配置等,可以参考其他资料。 (二)常见漏洞及原理分析 1.sql脚本注入 后台执行sql语句时,使用字符串拼接的方式,并且该字符串是使用浏览器提交的数据时。攻击者将提交的数据就行修改,可以达到执行希望的sql的目的。该攻击比较危险,可能会造成数据破坏和数据盗取的后果。 例如:用户提交username和password两个字段,系统后台判断语句为 String sql = “select * from user where name=’”+username+”’ and password=’”+password+”’”; 后台通过判断查询结果是否为空,来决定用户的账号和密码是否正确。 如果用户将username的值写为admin‘ or 1 or ‘,并且存在账号名称为admin的管理员用户,则可以直接以admin登录成功。 以上例子只是很简单的一种状况,如果某些功能处理不好,有可能会造成大量数据被盗取的严重后果。 2.跨站点脚本编制 攻击者在浏览器向服务端提交的数据中,加入危险的内容,如js脚本等。如果服务器端没有响应的防御措施,则会被注入跨站脚本。典型的攻击分为两类: 持久型:例如攻击者在某博客内留言,该留言内容中嵌有一段获取用户账号cookie的JS 脚本。该博客被某个登录用户访问时,脚本会在用户未知的情况下运行,就会被盗取账号等个人信息。 非持久型:攻击者在查询的请求内,使用URL参数的方式添加html语法内容和非法js 脚本,并且将该URL发送给登录用户。登陆用户点击连接之后,脚本会在用户未知的情况下运行,就有可能被盗取账号等个人信息。

常见WEB安全漏洞及整改建议

2. jQuery 跨站脚本漏洞 2.1 问题描述 jQuery是继prototype之后又一个优秀的Javascrīpt框架。 jQuery 1.6.3之前版本中存在跨站脚本漏洞。当使用location.hash选择元素时,通过特制的标签,远程攻击者利用该漏洞注入任意web脚本或HTML。 2.2 整改方法 目前厂商已经发布了升级补丁以修复此安全问题,补丁获取: .ubuntu./usn/USN-1722-1/ 2.3 整改案例 升级jQuery版本。 3. 跨站脚本编制 3.1 问题描述: 跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息的方式诱使管理员浏览,从而获得管理员权限,控制整个。攻击者利用跨站请求伪造能够轻松地强迫用户的浏览器发出非故意的HTTP请求,如诈骗性的电汇请求、修改口令和下载非法的容等请求。 风险等级:高 风险围: 任何存在输入/输出方法(包括GET与POST)的页面皆可能存在恶意符号输入缺陷,主要影响应用包括留言板、在线通讯信息、文章发布页面等。 3.2 整改建议: 对用户输入的参数执行严格检测: 1、对产生漏洞模块的传入参数进行有效性检测。int类型的只允许0-9的整型数字;string等字符类型的只允许(1-9,a-z,A-Z)的英文字母; 2、当客户端输入限定值意外的字符后,立即转向自定义的错误页,而不能使用服务器默认的错误输出方式; 3、对穿入参数进行危险字符过滤,禁止('、"、+、%、&、<>、()、;、,.等)特殊字符的传入。 3.3 案例: 加固例(一): /*将login.jsp中[String u =request.getParameter("u");]替换为如下容:*/ String u = request.getParameter("u"); u = u.replace ('<','_'); u = u.replace ('>','_'); u = u.replace('"','_');

web应用常见安全漏洞

SQL Injection(SQL 注入) 严重性 非常高 概述 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 原理 它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句 例子 程序从Http 请求中读取一个sql 查询, String sql ="SELECT * FROM accountWHERE name = 'Bob'AND password = '123'" request.getParameter(sql); ... stmt = conn.createStatement(); ... stmt.execute(sql)) 在执行execute()之前,并未进行对字符串sql检查,因此存在SQL 注入弱点。 所以,当在输入密码(password = '123')之后+加上or '1'='1'则SQL查询语句变为:SELECT * FROM accountWHERE name = 'Bob'AND password = '123'or '1'='1'这样的SQL注入会使得输入任意密码进入程序,这会使WEB程序本身和使用用户产生极大的安全威胁。 后果 ?挂蠕虫、木马、病毒、制作钓鱼网站 ?操纵受害者的浏览器、盗取用户的cookie/referer/ip等信息

防范 1.永远不要信任用户的输入,要对用户的输入输出进行校验,可以通过正则表达式,或限制长度,或者使用过滤函数,对单引号和双"-"进行转换等。 2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。 3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 4. 不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。 5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。 Cross-Site Scripting(跨站点脚本(XSS)) 严重性 非常高 概述 它指的是恶意攻击者往Web页面或者客户端脚本的页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。 原理 Stored XSS(存储式跨站脚本攻击) 这是最强大的一种XSS攻击,所谓存储跨站攻击是指用户提交给Web应用程序的数据首先就被永久的保存在服务器的数据库,文件系统或其他地方,后面且未做任何编码就能显示到Web页面。 Reflected XSS(反射跨站脚本攻击) 当Web客户端提交数据后,服务器端立刻为这个客户生成结果页面,如果结果页面中包含未验证的客户端输入数据,那么就会允许客户端的脚本直接注入到动态页面中。传统的例子是站点搜索引擎,如果我们搜索一个包含特殊HTML字符的字符串时,通常在返回页面

javaWeb安全验证漏洞修复总结

EMA服务管理平台二期扩容安全验收 漏洞修复总结 2011年5月

目录 1WEB安全介绍 (1) 2SQL注入、盲注 (1) 2.1SQL注入、盲注概述 (1) 2.2安全风险及原因 (2) 2.3A PP S CAN扫描建议 (2) 2.4应用程序解决方案 (4) 3会话标识未更新 (7) 3.1会话标识未更新概述 (7) 3.2安全风险及原因分析 (8) 3.3A PP S CAN扫描建议 (8) 3.4应用程序解决方案 (8) 4已解密登录请求 (9) 4.1已解密登录请求概述 (9) 4.2安全风险及原因分析 (9) 4.3A PP S CAN扫描建议 (9) 4.4应用程序解决方案 (9) 5跨站点请求伪造 (11) 5.1跨站点请求伪造概述 (11) 5.2安全风险及原因分析 (12) 5.3A PP S CAN扫描建议 (13) 5.4应用程序解决方案 (13) 6不充分账户封锁 (13) 6.1不充分账户封锁概述 (13) 6.2安全风险及原因分析 (13) 6.3A PP S CAN扫描建议 (14) 6.4应用程序解决方案 (14) 7启用不安全HTTP方法 (14) 7.1启用不安全HTTP方法概述 (14) 7.2安全风险及原因分析 (15) 7.3A PP S CAN扫描建议 (15) 7.4应用程序解决方案 (15) 8HTTP注释敏感信息 (16) 8.1HTTP注释敏感信息概述 (16) 8.2安全风险及原因分析 (16) 8.3A PP S CAN扫描建议 (16) 8.4应用程序解决方案 (17) 9发现电子邮件地址模式 (17)

系统漏洞修复

系统漏洞修复 【一什么是系统漏洞?】 漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。 【二什么是漏洞补丁?】 操作程序,尤其是WINDOWS,各种软件,游戏,在原公司程序编写员发现软件存在问题或漏洞,统称为BUG,可能使用户在使用系统或软件时出现干扰工作或有害于安全的问题后,写出一些可插入于源程序的程序语言,这就是补丁。 如果系统存在漏洞,请及时打上漏洞补丁,以防止恶意软件,木马,病毒的攻击。 【三360安全卫士支持哪些系统的漏洞修复?】 360安全卫士目前仅支持windows xp和windows 2000系统的漏洞的检测及漏洞补丁的下载。【四360安全卫士所提供的漏洞补丁来自何处?】 360安全卫士所提供的漏洞补丁均直接链接至自微软官方补丁下载地址。 360安全卫士目前仅支持windows xp和windows 2000系统的漏洞的检测及漏洞补丁的下载。 【五360安全卫士下载的补丁保存在什么位置?】 通过360安全卫士所下载的漏洞补丁安装程序位置为:C:\Program Files\360safe\hotfix 如果您已经安装完毕这些补丁,可以将这些补丁安装程序删除以节约系统空间 【六为什么有时候会提示我需要非独立安装】 就是这个补丁不能和其他补丁一起安装,有时候还可能需要重启。把这个装完后再继续安装别的补丁 【七修复系统漏洞后还应该做什么】 在您修复系统漏洞以后,请启动360进行木马查杀;木马经常会利用系统漏洞侵入系统盗取账号密码。 如果遇到木马杀不掉,推荐您使用360顽固木马专杀工具。 下载地址:https://www.360docs.net/doc/d613735638.html,/4005462/2922024.html

web应用的漏洞分类

Web应用是指采用B/S架构、通过HTTP/HTTPS协议提供服务的统称。随着互联网的广泛使用,Web应用已经融入到日常生活中的各个方面:网上购物、网络银行应用、证券股票交易、政府行政审批等等。在这些Web 访问中,大多数应用不是静态的网页浏览,而是涉及到服务器侧的动态处理。此时,如果Java、PHP、ASP 等程序语言的编程人员的安全意识不足,对程序参数输入等检查不严格等,会导致Web应用安全问题层出不穷。 本文根据当前Web应用的安全情况,列举了Web应用程序常见的攻击原理及危害,并给出如何避免遭受Web 攻击的建议。 1Web应用漏洞原理 Web应用攻击是攻击者通过浏览器或攻击工具,在URL或者其它输入区域(如表单等),向Web服务器发送特殊请求,从中发现Web应用程序存在的漏洞,从而进一步操纵和控制网站,查看、修改未授权的信息。 1.1Web应用的漏洞分类 1、信息泄露漏洞 信息泄露漏洞是由于Web服务器或应用程序没有正确处理一些特殊请求,泄露Web服务器的一些敏感信息,如用户名、密码、源代码、服务器信息、配置信息等。 造成信息泄露主要有以下三种原因: ?Web服务器配置存在问题,导致一些系统文件或者配置文件暴露在互联网中; ?Web服务器本身存在漏洞,在浏览器中输入一些特殊的字符,可以访问未授权的文件或者动态脚本文件源码; ?Web网站的程序编写存在问题,对用户提交请求没有进行适当的过滤,直接使用用户提交上来的数据。 2、目录遍历漏洞 目录遍历漏洞是攻击者向Web服务器发送请求,通过在URL中或在有特殊意义的目录中附加“../”、或者附加“../”的一些变形(如“..\”或“..//”甚至其编码),导致攻击者能够访问未授权的目录,以及在Web服务器的根目录以外执行命令。 3、命令执行漏洞 命令执行漏洞是通过URL发起请求,在Web服务器端执行未授权的命令,获取系统信息,篡改系统配置,控制整个系统,使系统瘫痪等。 命令执行漏洞主要有两种情况:

相关文档
最新文档