聊一聊Web开发安全

安全 应用安全
今天回忆下web开发安全问题,以前在新浪博客时,遇到最多的攻击是XSS和SQL注入攻击。博客最核心的功能就是富文本发文,允许执行html语义标签,如果处理不当,就能执行js语句,导致各种的xss攻击。

 [[337378]]

本文转载自微信公众号「虞大胆的叽叽喳喳」,作者虞大胆  。转载本文请联系虞大胆的叽叽喳喳公众号。

今天回忆下web开发安全问题,以前在新浪博客时,遇到最多的攻击是XSS和SQL注入攻击。

博客最核心的功能就是富文本发文,允许执行html语义标签,如果处理不当,就能执行js语句,导致各种的xss攻击。

那时候解析文章内容没有很好的dom解析库,堵住漏洞非常辛苦和被动。

另外攻击就是sql注入,破坏过一些表数据,但大范围的故障没有出现过。

这二个攻击在互联网刚开始的时候非常流行,最重要的原因就是它们的宿主环境是浏览器,浏览器能够执行html和js。SQL攻击同样如此,如果宿主环境不能打印sql执行结果,攻击力度会小很多。

而现在是APP时代,都是接口调用,即使接口中含有html字符,APP也不会去执行;同时API接口的鉴权也非常严格,很少出现SQL注入攻击。

当然HTTPS的推广和普及也让http服务安全提高了不少,至少很难出现残暴的篡改攻击了。

所以现在攻击的土壤就是企业内部网站了,因为它们大多数运行在浏览器之下,那如何解决呢?

从Web安全的角度看,cookie和session的设计本身就是有问题的,以前写过一篇文章,后面可以发到公众号中。

xss攻击本质上也是结合cookie一起形成危害的,今天同事提了个方法,现在很多cookie不会校验它的出处,如果能够绑定cookie和设备(比如设备号或者IP),那么攻击就小了很多,比如发现攻击者附带的cookie值和IP与存储在redis中的cookie和IP不一致,就拒绝访问。

对于内部系统,可以采取二次auth验证,比如nginx就有http basic auth验证;或者登陆才能访问内部系统。

攻击分为主动攻击和被动攻击,主动攻击不可怕,总能找到方法解决,而被动攻击就非常危险,在关键时刻可以给人致命一击。

在出现安全问题的时候,首先要判断服务器有没有被人控制,如果被控制了,危险非常大;如果仅仅是利用应用程序漏洞,那么危险性就会小很多。

服务器一旦被攻击,那么数据库密码等关键信息就会泄露,数据库就相当于裸奔了,就算数据库隔离的好,还是抵挡不住别人一条DELETE语句;为了减少损失,有两个建议。

第一就是数据库用户授权要做的更精细一点;另外使用proxy代理数据库,通过proxy来抵挡一些攻击。

应用层的攻击主要利用软件的漏洞,或者考验编程人员的能力。所以经常升级系统和软件,使用相对成熟的代码框架,严谨编程,能够减少很多问题,大概90%的安全问题还是由于代码的原因。

当然口令安全也非常重要,有很多理论知识,但只要掌握几点就能解决大部分问题,口令一定要是强口令,避免暴力破解;另外就是口令存储要使用更严格的密码学算法,不要简单的sha1然后存储到数据库中,很容易字典攻击;最后在应用层的防攻击也很重要,不过现在很少直接口令登陆了,都是验证码或者微信授权。

当然很重要的一个习惯就是经常性变更口令,能够解决很多问题,其实有的时候出现一个安全问题,最后才发现,口令泄露了,根本不是技术问题。

对于服务器本身安全,就是尽量少装软件;少开外网端口(比如mongodb,es一定不要绑定外网端口),即使开了,也要做白名单;使用防火墙做更细颗粒度的控制;服务之间做隔离,比如web服务器被攻击了,但web服务器访问的数据库密码由更安全的硬件存储,这样危险性就少了很多。

有的时候大家很注意外部安全,但内网之间的隔离也非常重要,不能畅通无阻。

隔离还有个好处就是出现问题后,可以快速在其他机房复制服务,从而减少故障的影响。授权也很重要,服务之间的授权方式一定要在云端,不能依赖本地。

当然核心安全还是数据库资源,数据是一切之本。

最后没有绝对的安全,都是博弈,如果网站规模不大,可能没人愿意黑你。而如果规模化了,那么就树大招风了。提前做好准备,以便应对,不至于出现问题的时候手足无措。

 

责任编辑:武晓燕 来源: 虞大胆的叽叽喳喳
相关推荐

2019-03-21 11:04:22

安全标准信息

2019-07-01 14:55:44

应用安全web安全渗透测试

2020-01-03 11:04:54

安全测试渗透

2022-07-19 08:01:08

Azure云环境安全

2021-04-28 08:35:52

区块链技术开发

2020-03-06 15:11:21

进程线程Web

2016-05-31 10:29:09

2021-06-30 07:19:35

微服务业务MySQL

2023-09-22 17:36:37

2021-01-28 22:31:33

分组密码算法

2020-05-22 08:16:07

PONGPONXG-PON

2020-03-31 10:08:15

零信任安全软件

2018-06-07 13:17:12

契约测试单元测试API测试

2023-05-15 08:38:58

模板方法模式

2021-01-29 08:32:21

数据结构数组

2022-08-08 08:25:21

Javajar 文件

2021-08-04 09:32:05

Typescript 技巧Partial

2019-02-13 14:15:59

Linux版本Fedora

2018-11-29 09:13:47

CPU中断控制器

2021-02-06 08:34:49

函数memoize文档
点赞
收藏

51CTO技术栈公众号