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

背景:當時項目沒用什麼框架,過濾器,請求限制等都須要本身手寫。html

一、請求加時間戳java

  在後臺過濾器中能夠加判斷,若是請求時間戳與服務器時間相差太大,能夠返回異常,具體狀況能夠具體使用。nginx

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

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

<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};

二、jsp獲取數據須要驗證緩存

  例如下代碼可能存在漏洞:tomcat

<% 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注入

 三、隱藏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; ->便可隱藏版本號
    …….
  }

四、----

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

.Header Manipulation漏洞

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

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

---先後臺數據獲取時加入驗證或者過濾

---cookie安全   COOKIE安全與防禦

---http頭信息

 

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

相關文章
相關標籤/搜索