背景:當時項目沒用什麼框架,過濾器,請求限制等都須要本身手寫。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; ->便可隱藏版本號
…….
}
四、----
---禁制除get、post外其餘的訪問方式
---限制同一ip訪問頻率
---先後臺數據獲取時加入驗證或者過濾
---cookie安全 COOKIE安全與防禦
---http頭信息