1、SQL注入攻击
定义:
攻击者在HTTP请求中注入恶意的SQL代码,当服务器利用参数构建SQL语句的时候,恶意的SQL代码被一起构建,并在数据库中执行。
示例:
用户登录: 输入用户名xx, 密码 'or '1' = ' 1,如果此时使用参数构建的方式,就会出现
select * from user where name = "xx" and password = '' or '1' = '1' ,这样不管输入的用户名和密码是什么内容,查询出来的用户列表都不会为空。
预防:
> web方面
# 有效性校验
# 限制输入字符串长度
> 服务器方面
# 有效性校验【为什么服务器端还要做有效性校验,第一准则,外部的都是不可信的,防止攻击者绕过WEB请求】
# 不用拼接的SQL字符串
# 过滤SQL需要的参数中的特殊字符
# 使用预编译的preparestatement
2、XSS攻击
定义:
跨站点脚本攻击,攻击者通篡改网页,嵌入恶意脚本程序,在用户浏览网页时,控制用户浏览器进行恶意操作的一种方式。
预防:
# 前端,服务端同时对字符串输入长度限制
# 前端,服务端同时对HTML进行转义处理,将其中的<,>等特殊字符进行转义编码。
防xss的核心是必须对输入的数据进行过滤处理。
3、CSRF攻击
定义:
跨站点请求伪造:攻击者通过跨站请求,以合法的用户身份进行非法操作,可以这么理解,攻击者利用你的身份或你的名义向第三方发送恶意请求。CSRF能做到的事情包括利用你的身份发邮件,发短信甚至盗取账号信息,交易转账等。
预防:
token机制:在HTTP请求中进行token验证,如果请求中没有token或者token内容不正确,则认为是csrf攻击而拒绝该请求。
验证码:通常情况下,验证码能够很好的遏制CSRF攻击,但是很多情况下,处于用户体验,验证码只是一种辅助手段,而不是主要的解决方案。
referer:在HTTP Header中有个字段referer,他记录http请求的来源地址。如果refer是其他网站的话。则可能是CSRF攻击,从而拒绝该请求。但是有些情况下,服务器并非都能取到referer。
1)验证请求来源地址。
2)关键操作添加验证码。
3)在请求地址中添加token并验证。
4、文件上传漏洞
定义:
指的是用户上传一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力。许多第三方框架、服务,都曾经被爆出文件上传漏洞,比如很早之前的 Struts2,以及富文本编辑器等等,可被攻击者上传恶意代码,有可能服务端就被人黑了。
预防:
# 文件上传的目录设置为不可执行。
# 判断文件类型。在判断文件类型的时候,可以结合使用 MIME Type,后缀检查等方式。因为对于上传文件,不能简单地通过后缀名称来判断文件的类型,因为攻击者可以将可执行文件的后缀名称改为图片或其他后缀类型,诱导用户执行。
# 对上传的文件类型进行白名单校验,只允许上传可靠类型。
# 上传的文件需要进行重新命名,使攻击者无法猜想上传文件的访问路径,将极大地增加攻击成本,同时向 shell.php.rar.ara 这种文件,因为重命名而无法成功实施攻击。
# 限制上传文件的大小。
# 单独设置文件服务器的域名
5、DDOS攻击
定义:
客户端向服务端发送请求链接数据包,服务端向客户端发送确认数据包,客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认,没有彻底根治的办法,除非不使用 TCP
预防:
# 限制同时打开 SYN 半链接的数目
# 缩短 SYN 半链接的 Time out时间
# 关闭不必要的服务