1、常见Web攻击手段
(1)、XSS攻击 (Cross Site Scripting, 跨站脚本攻击)
攻击者在网页嵌入恶意脚本呢程序,当用户打开网页,脚本开始在客户端浏览器执行,盗取客户端cookie、用户信息,执行木马程序等。
例子:在input 输入框中输入script:<script>alert("haha")</script>。若网页未过滤该脚本,直接显示,脚本会运行显示弹出框。
解决:将特殊符号 <、>、‘、” 都转义编码为< > & 。JSTL、Struts等框架自带XML转义功能,如JSTL设置 excapeXML="true";
(2)、CRSF (Corss Site Request Forgery,跨站请求伪造)
攻击者盗用用户身份,以用户名义向第三方网站发送恶意请求。
例子: 假设网站A上有恶意链接或脚本,点击该链接直接发生用户在银行网站B上的转账操作。用户在登录某银行网站A后,没有及时退出,若过后不久不小心在网站A上点击了链接,则银行网站B处理银行转账请求,网站A成功钓鱼。
解决:(a)、将Cookie设置 httpOnly 属性,保证JavaScript、Applet等无法读取Cookie
(b)、增加Token,即在表单中增加一个隐藏域。
(c)、通过Refer识别:request.getHeader("refer"); refer 记录了HTTP请求的来源,判断来源是否合法。
(3)、SQL注入
将SQL命令伪装成正常的HTTP请求参数,传递到服务器端,欺骗服务器执行恶意SQL。
例子:字符串拼凑SQL语句: String sql = "select * from user where username =\'" + username + "\' and password=\'"+password+"\'";
若用户填入 username 为 "111",password为 "111 or 1=1; delete table user -- " ,这不但绕过验证,而且将把表数据删完,造成灾难性后果。
解决:1、不使用字符串拼凑SQL,使用PreparedStatement
2、使用ORM框架,如Hibernate,Ibatis
3、密码等信息不能明文存储,加密时候加盐,防止穷举
4、处理好异常
(4)、文件上床漏洞
将恶意的病毒、木马等修改后缀名后,上传
解决:通过文件的魔数判断文件类型,即常用类型的文件如JPEG、PNG、GIF、TIFF、BMP、DWG、PSD、XML、HTML、PDF、ZIP、RAR、WAV、AVI等,起始几个字节的内容是固定的。
imagemagick 可处理图片。
(5)、DDoS 攻击 (Distributed Denial of Service) 分布式拒绝服务攻击
基本Dos: 利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器的相应。
DDos 即是分布式的Dos。
常见手段:
SYN Flood
TCP连接需要三次握手。攻击者伪造大量不存在的IP地址请求TCP连接的SYN报文,服务器维护一个巨大的半连接等待IP列表,不断对列表进行遍历和重试,占用大量资源,使得正常用户无法通信。
DNS Query Flood
向被攻击服务器发送海量大部分不存在的域名解析请求。同时伪造端口和客户端IP,访问被访问控制列表过滤。
HTTP Flood
通过控制大量肉鸡或者匿名代理,模拟正常用户给网站发起请求直到网站拒绝服务为止。
(6)、DNS域名劫持、CDN回源攻击、服务器权限提升、缓冲区溢出等。
2、常用安全算法
(1)、数字摘要:验证原文是否被篡改,MD5,SHA
(2)、加密算法:对称 DES、3DES、AES,非对称RSA
(3)、数字签名:将数字摘要与加密结合起来,私钥加密,公钥揭秘,从而证实作者身份,验证没有篡改。MD5withRSA,SHA1withRSA
(4)、数字证书:可使用openSSL
3、摘要认证
4、签名认证
5、HTTPS
基础:SSL、TLS
6、OAuth