背景:当时项目没用什么框架,过滤器,请求限制等都须要本身手写。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头信息