WEB安全问题一直是互联网行业最头疼的问题之一,出现这种问题企业一不小心就可能陷入万劫不复的境地,所以不论测试还是开发都需要关注,下面就介绍一下WEB安全中最常见的几种WEB安全攻击和防御,作为测试可以在日常测试中可以通过关注攻击方式来模拟安全测试攻击,作为开发在日常编码中带着防御思路去设计编码,尽量从源头上扼杀安全问题。下面是常见的WEB安全攻击:
SQL脚本注入
简介:
SQL脚本注入,就是在请求URL的参数中传入SQL语句,然后导致DAO数据层中的语句+注入的SQL语句连接上DB进行SQL语句的执行;影响力:
轻则表中数据暴露,刷爆数据库,拖慢正常用户的数据请求使用,重则表数据被恶意修改或删除,再或者整个表数据被删除。攻击情景:
http://www.aaa.com/search?title=123 进行标题内容的查询,如果DAO层中的语句使用的是简单的SQL拼接方式:
//DAO
public List<MDatas> search(String title){
String sqlStr="
select fields
from tablename
where title title='" + title + "'";
//下面省略DB相关操作
//....
}
当我请求数据接口的时候:http://www.aaa.com/search?title=1' or 1=1; 懂点SQL基础的都明白后面的or 1=1 会导致恒true,这个时候就会查出表中所有的数据,此外如果是在后面插入一条删除表等具有攻击性的危险SQL语句,那就做好被删库跑路的准备吧。
防御:
有些语言本身就有这个安全机制,只要传入的参数是有SQL,或者JavaScript会提示危险参数,可以通过配置webconfig,或者路由方法的属性来开启和关闭。
但是最保险的方案还是要自己平时在写DAO的时候要注意,SQL语句不要使用拼接的方式,都使用参数化的方式,这样就不会出现SQL注入的问题了。
//DAO
public List<MDatas> search(String title){
var sqlStr="
select fields
from tablename
where title title=@title";
//下面省略DB相关操作
//....
}
XSS 跨站脚本攻击
简介:
中文名叫跨站脚本攻击,就是在请求URL参数中,或者form提交的内容中注入JavaScript脚本;影响力:
轻则用户体验异常弹窗,重则用户cookie数据被盗取,引导用户到非法地址;攻击场景:
原始正常的请求是这样的:http://www.bbb.com/userinfo/?username=王二&description=二逼青年,
对应的前端 userinfo 视图是这样的:
<!-- 省略顶部 -->
<div>
<p>@username<p>
<p>@description</p>
</div>
<!-- 省略底部 -->
当我参数改为:http://www.xx.com/userinfo/?username=王二&description=二逼青年<script type="text/javascript">alert('哈哈')</script>
其实攻击方式很简单,就是在参数后面加上js脚本。
对应的前端 userinfo 视图是这样的:
<!-- 省略顶部 -->
<div>
<p>王二<p>
<p>
二逼青年
<script type="text/javascript">alert('哈哈')</script>
</p>
</div>
<!-- 省略底部 -->
这个时候把这个地址分享给别人,他一打开就会弹出一个JS弹窗;
如果这个时候我注入的脚本是获取cookie到我的接口,然后把地址分享给其他的用户,这样就可以通过获取到的cookie模拟用户的登陆了;
form提交就不举例了,也是一样,就是提交的内容里输入JavaScript 脚本,然后绑定内容的时候没有进行处理,这样就会导致上面一样的问题。
防御:
在视图绑定数据的时候(前端拼接,或者服务端脚本绑定)需要对数据进行HTML编码
结果如:
<!-- 省略顶部 -->
<div>
<p>王二<p>
<p>
二逼青年
<script type="text/javascript">alert('哈哈')</script>
</p>
</div>
<!-- 省略底部 -->
CSRF跨站请求伪造
简介:
跨站请求伪造,就是当A站用户未退出的情况下,通过其他非法B站发起非法请求来触发A站的请求操作;用户在不知情的请求下被诱导操作。影响力:
以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账,个人隐私泄露以及财产安全。攻击情景:
![此图引用hyddd博客](https://i-blog.csdnimg.cn/blog_migrate/c7c0a344f2d7d512c1f3aeb9dbae45a0.png)
防御:
用户进入操作页面的时候绑定令牌到隐藏input,服务端进行令牌的校验,重要的操作,如:提现,充值等需要增加验证码环节。
HTTP劫持
简介:
你本来要打开的是正常的百度页面,结果右下角弹出了我是渣渣辉的贪玩蓝月游戏广告。影响力:
注入广告,骚扰误导用户,严重影响体验攻击情景:
在公共场所有很多免费的WIFI,有些免费的WIFI会对HTTP进行劫持,然后修改html注入广告,网络供应商也会进行HTTP劫持 ,如使用移动网络的时候经常会出现移动广告。防御:
可以将页面的请求协议由HTTP升级成HTTPS,这样即便被劫持,由于没有证书无法进行解密,也就无法注入广告了。
DDoS攻击
简介:
分布式拒绝服务攻击,俗称洪水攻击,通过木马寄生在用户机子上,当成 肉机,需要的时候发起群攻。影响力:
刷爆服务器,严重会宕机防御:
需要在服务器部署安全防火墙。
本文来自:测试开发栈