网站安全漏洞 | 青训营

134 阅读3分钟

01.什么是漏洞

02.服务端漏洞

03.客户端漏洞

一个网站的基本构成:

前端: JavaScript / vue / react

网关: nginx

后端: Go / Java / Node

前后端交互: HTTP / WebSocket

常见安全事件:

数据泄漏 服务瘫痪 成果失窃 系统劫持

网站攻击者及意图:

1.政治目的: 出于政治目的实施黑客攻击。可能涉及窃取关键系统的机密数据、破坏关键系统正常运行。

2.经济目的: 网站教据具有很高的经济价值,攻击者通过网必漏洞违法获取数据并进行售卖。

3.竞争目的: 同类厂商之间可能由于竞争原因,对竟品网站进行一些攻击,以达到让对方站点无法运行的目的

4.炫技、泄愤 用攻击对方网站方式能显自己的技术实力,或者对某些仇恨的系统发起攻击

服务端漏洞:

第三方组件漏洞

防护方式:防护方式:针对java可以选择使用dependency - check maven检 查项目以来的组件是否存在安全漏洞

SQL注入:

SQL语句静态模板和动态数据部分没有严格区分,如果在数据项中加入了某些sqL语句关键字(比如说SELECT、DROP等等)。这些sQL语句就很可以在数据库写入或读取数据时得到执行。

  1. [Java]错误使用语言框架,或者语言框架本身存在安全问题 使用Mybatis - plus的危险函数,比如inSql, 支持直接SQL拼接,存在SQL注入风险

  2. [ava] Mybatis使用「$」构建SQL模板

  3. Golang常见错误写法

业务场景经常遇到根据用户定义的字段进行排序的功能,如果直接将用户输入字段作为维度带到Order则会产生sQL注入,假设GORM语句为:db.Order(param).Find(&products)

正常情况用户输入维度字段即可实现自定义排序 param: code

SQL语句: SELECT * FROM products WHERE products'."deleted. at' IS NULL ORDER BY code

攻击者可以输入SQL语句,改变原始SQL语义 param: if(1, sleep(10), 'code')

SQL语句: SELECT * FROM products' WHERE products. deleted_ at IS NULL ORDER BY if(1, sleep(10), 'code')

防护方式:

1.尽量不要基于DB的Raw方法拼接构造SQL语句,而应该使用预编译、ORM框架 2.使用ORM框架时,应该注意框架中的特性,可能存在不安全的写法导致的SQL注入问题。 3.在复杂场景一 定要使用拼接SQL,需要对外部输入进行转义。

命令执行

代码中遇到需要调用某个命令才能完成的功能时候,会涉及到命令拼接,如果命令拼接没有做好安全过滤,那么将会导致命令注入风险,服务器权限将会被控制

防护方式:

1.对动态的值尽可能设置白名单进行验证。 2.如果某些位置无法白名单,需要尝试对数据类型进行校验。 3.特殊字符黑名单的过滤,或者转义。

越权漏洞:

认证:你是谁?

授权:你能做什么?

越权:资源访问或操作时候主体权限没有进行校验就会造成越权问题,细分为:未授权、水平越权和垂直越权

黑灰产场景:订单查询功能提供订单id即可查询订单详情,这里攻击者可以遍历orderld获取其他用户的订单信息

防护方式:

涉及资源id尽量不要使用短id (遍历难度较小),同时最重要的一定要最好 资源属主校验