java web項目請求控制及簡單漏洞防范


背景:當時項目沒用什么框架,過濾器,請求限制等都需要自己手寫。

1、請求加時間戳

  在后台過濾器中可以加判斷,如果請求時間戳與服務器時間相差太大,可以返回異常,具體情況可以具體使用。

  請求中加時間戳的示例如下:

  ①form表單提交,在表單內加隱藏域,通過js代碼給id賦值。

<input id="curdate" name="curdate" type="hidden" />
$("#curdate").attr("value",timestamp);

  ②ajax請求后台

var timestamp =(new Date()).valueOf();            
var data={"a":a,"b":b,"curdate":timestamp};

2、jsp獲取數據需要驗證

  例以下代碼可能存在漏洞:

<% String eid = request.getParameter("eid"); %>
...
Employee ID: <%= eid %>  

  如果 eid 只包含標准的字母或數字文本,這個例子中的代碼就能正確運行。如果 eid 里有包含元字符或源代碼中的值,那么 Web 瀏覽器就會像顯示 HTTP 響應那樣執行代碼。  

  起初,這個例子似乎是不會輕易遭受攻擊的。畢竟,有誰會輸入導致惡意代碼的 URL,並且還在自己的電腦上運行呢?真正的危險在於攻擊者會創建惡意的 URL,然后采用電子郵件或者社會工程的欺騙手段誘使受害
者訪問此 URL 的鏈接。當受害者單擊這個鏈接時,他們不知不覺地通過易受攻擊的網絡應用程序,將惡意內容帶到了自己的電腦中。這種對易受攻擊的 Web 應用程序進行盜取的機制通常被稱為反射式 XSS。

  所以需要將數據過濾,使用c標簽,再加上自定義el表達式,過濾特殊字符。最終代碼如下:

<input type="hidden" name="cons_no" value="<c:out value='${ff:filter(cons_no)}'/>"/>

①引入c標簽

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

②自定義el函數

  1在任意位置寫一個過濾方法  

public class ELFilter {
    
    public static String filter(String message){
        if(message==null){
            return null;
        }
        //結合實際,數據都為簡單的數字或者字母漢字,不會出現特殊符號,把以下特殊字符直接抹掉
        message = message.replace("<", "");
        message = message.replace(">", "");
        message = message.replace("?", "");
        message = message.replace("#", "");
        message = message.replace("$", "");
        message = message.replace("&", "");
        message = message.replace("%", "");
        message = message.replace("\n", "");
        message = message.replace("\"", "");
        message = message.replace("'", "");
        message = message.replace("{", "");
        message = message.replace("}", "");
        return message;
    }
}

  2在項目WEB-INF下創建 elfilter.tld 文件,內容如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"  
    version="2.0">  
    <tlib-version>1.0</tlib-version>  
    <jsp-version>2.0</jsp-version>  
    <short-name>function</short-name>  
    <uri>/WEB-INF/elfilter.tld</uri><!-- 此uri好像隨便寫,只要與頁面引用時一致就可以 -->
    <function>  
        <name>filter</name>  
        <function-class>com.a.b.util.elecheat.ELFilter</function-class>  
        <function-signature>java.lang.String filter(java.lang.String)</function-signature>  
    </function>  
</taglib>

  3前台引用

<%@ taglib prefix="ff" uri="/WEB-INF/elfilter.tld"%>

      參考:自定義el函數    使用JSTL標簽需要的JAR包和JSP頁面的引用   自定義EL函數防止HTML注入

 3、隱藏http響應頭中的nginx或者apach版本信息

  tomcat

  修改之前   Server:Apache-Coyote/1.1  ,泄露了當前容器的類型,可能會被針對攻擊

  修改方法:
  在tomcat的conf路徑下,server.xml中,
  <Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000"  redirectPort="8443" server="自定義信息"/>

  nginx

  修改nginx.conf 

  http {
    ……
    server_tokens off; ->即可隱藏版本號
    …….
  }

4、----

java web開發常見漏洞攻擊及解決辦法

.Header Manipulation漏洞

---禁制除get、post外其他的訪問方式

---限制同一ip訪問頻率

---前后台數據獲取時加入驗證或者過濾

---cookie安全   COOKIE安全與防護

---http頭信息

 

 給url加時間戳,騙過瀏覽器緩存


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM