1. 程式人生 > 其它 >IBM Appscan漏洞修復的問題

IBM Appscan漏洞修復的問題

IBM Appscan漏洞修復的問題

參考文件:http://www.cnblogs.com/anngeiBKY/p/4952269.html

1、會話標識未更新

參考文件:http://www.cnblogs.com/anngeiBKY/p/4952269.html 登陸介面和登陸成功的介面一致時,修改後臺邏輯,在驗證登陸邏輯的時候,先強制讓當前session過期,然後用新的session儲存資訊;

request.getSession().invalidate(); 
if (request.getCookies() != null) {
Cookie cookie = request.getCookies()[0];// 獲取cookie
cookie.setMaxAge(0);// 讓cookie過期
}
HttpSession session = request.getSession(false);

2、使用 HTTP 動詞篡改的認證旁路

參考文件:http://blog.csdn.net/lyd135364/article/details/52067175

方法 從以下位置進行控制: GET 至: BOGUS;在程式中加過濾器,針對每一個請求都加上過濾器

(1) 過濾器程式碼

public class MethodFilter implements Filter{
@Override
public void destroy() {

}
@Override
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res=(HttpServletResponse) response ;
String method= req.getMethod();
if(method!=null){
if (!"GET".equals(method) && !"POST".equals(method) && !"HEAD".equals(method) ) {
res.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
return;
}
chain.doFilter(request, response);
return;
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {

}
}

(2) 過濾器

<filter>
<filter-name>MethodFilter</filter-name>
<filter-class>com.sinba.itsm.MethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MethodFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MethodFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

3、跨站點請求偽造

參考文件:http://blog.csdn.net/huoyunshen88/article/details/16862493 http://www.myhack58.com/Article/60/61/2016/77539.htm

說的白話一點就是,別的站點偽造你的請求,最可怕的是你還沒有察覺並且接收了。

驗證Referer:

(1)過濾器程式碼

public class RefererFilter implements Filter{
@Override
public void destroy() {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
throws IOException, ServletException {
HttpServletResponse res=(HttpServletResponse) response ;
HttpServletRequest req = (HttpServletRequest) request;
String referer=req.getHeader( "Referer" );
String startUrl = "";
if(referer!=null){
startUrl=referer.substring(0,referer.indexOf("itsm-webapp/pages/"))+"itsm-webapp/pages/";
}
if(referer==null){
chain.doFilter(request, response);
return;
}
if ((referer!= null ) &&(referer.trim().startsWith(startUrl))){
chain.doFilter(request, response);
return;
} else {
request.getRequestDispatcher( "error.jsp" ).forward(request,response);
return;
}
}

@Override
public void init(FilterConfig arg0) throws ServletException {

}
}

(2)過濾器

<filter>
<filter-name>RefererFilter</filter-name>
<filter-class>com.sinba.itsm.RefererFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RefererFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>RefererFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

4、發現數據庫錯誤模式

專案裡的報錯為資料庫連線數的問題,修改了資料庫的連線數就好了。

5、查詢中接受的主體引數

可以將post方法直接改為get。

6、 缺少“Content-Security-Policy”頭 、 缺少“X-Content-Type-Options”頭、缺少“X-XSS-Protection”頭及缺少跨幀指令碼編制防禦

參考文件:https://wenku.baidu.com/view/61f9027e5727a5e9856a61f3.html http://blog.csdn.net/u013894638/article/details/52135357?locationNum=12 https://imququ.com/post/web-security-and-response-header.html 即在響應地方加上即可:

(1)過濾器程式碼

public class JSHeaderFilter implements Filter{
@Override
public void destroy() {

}
@Override
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response1 = (HttpServletResponse) response;
response1.addHeader("content-security-policy","default-src 'self'");
response1.addHeader("x-content-type-options", "nosniff");
response1.addHeader("x-xss-protection","1; mode=block");
response1.addHeader("x-frame-options","SAMEORIGIN");
chain.doFilter(request, response);
return;
}

@Override
public void init(FilterConfig arg0) throws ServletException {

}
}

(2)過濾器

<filter>
<filter-name>JSHeaderFilter</filter-name>
<filter-class>com.sinba.itsm.JSHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>JSHeaderFilter</filter-name>
<url-pattern>*.js</url-pattern>
</filter-mapping>

7、自動填寫未對密碼欄位禁用的 HTML 屬性

AppScan 發現密碼欄位沒有強制禁用自動填寫功能。 在input框新增autocomplete="off"屬性。

8、檢測到目標URL存在連結注入漏洞

“連結注入”是修改站點內容的行為,其方式為將外部站點的 URL 嵌入其中,或將有易受攻擊的站點中的指令碼 的 URL 嵌入其中。將 URL 嵌入易受攻擊的站點中,攻擊者便能夠以它為平臺來啟動對其他站點的攻擊,以及攻擊這個易受攻擊的站點本身。 在這些可能的攻擊中,有些需要使用者在攻擊期間登入站點。攻擊者從這一易受攻擊的站點本身啟動這些攻擊,成功的機會比較大,因為使用者登入的可能性更大。 “連結注入”漏洞是使用者輸入清理不充分的結果,清理結果會在稍後的站點響應中返回給使用者。攻擊者能夠將危險字元注入響應中,便能夠嵌入 URL 及其他可能的內容修改。

(1)過濾器程式碼

public class PremeterFilter implements Filter{
@Override
public void destroy() {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterchain)
throws IOException, ServletException {
//判斷是否有注入攻擊字元
HttpServletRequest req = (HttpServletRequest) request;
String inj = injectInput(req);
if (!inj.equals("")) {
request.getRequestDispatcher( "error.jsp" ).forward(request,response);
return;
} else {
// 傳遞控制到下一個過濾器
filterchain.doFilter(request, response);
}
}

/**
* 判斷request中是否含有注入攻擊字元
* @param request
* @return
*/
public String injectInput(ServletRequest request) {
Enumeration e = request.getParameterNames();
String attributeName;
String attributeValues[];
String inj = "";
String injdb = "";
while (e.hasMoreElements()) {
attributeName = (String)e.nextElement();
//不對密碼資訊進行過濾,一般密碼中可以包含特殊字元
if(attributeName.toLowerCase().contains("password")){
continue;
}
attributeValues = request.getParameterValues(attributeName);
for (int i = 0; i < attributeValues.length; i++) {
if(attributeValues[i]==null||attributeValues[i].equals("")){
continue;
}
inj = injectChar(attributeValues[i]);
if (!inj.equals("")){
return inj;
}
}
}
return inj;
}

/**
* 判斷字串中是否含有注入攻擊字元
* @param str
* @return
*/
public String injectChar(String str) {

String inj_str = "\" ) \' * % < > &";
String inj_stra[] = inj_str.split(" ");

for (int i = 0 ; i < inj_stra.length ; i++ ){
if (str.indexOf(inj_stra[i])>=0){
return inj_stra[i];
}
}
return "";
}

@Override
public void init(FilterConfig arg0) throws ServletException {

}

}

(2)過濾器

<filter>
<filter-name>PremeterFilter</filter-name>
<filter-class>com.sinba.itsm.PremeterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PremeterFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>PremeterFilter</filter-name>
<url-pattern>/j_spring_security_check</url-pattern>
</filter-mapping>

9、IBM Appscan下載: http://pan.baidu.com/s/1dFFti85

密碼: u7z3