网站常见安全漏洞与预防学习笔记 | 青训营

175 阅读7分钟

网站常见安全漏洞与预防

1,一些经常听见的安全事件

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

2,漏洞分类

1.png

3,服务端漏洞预防

  • SQL注入

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

2.png

2.  Golang常见错误写法

    ```go
    param:code
    SQL语句:SELECT * FROM `products` WHERE `products`.`deleted_at`IS NULL ORDER BY code
    ```

    攻击者可以输入SQL语句改变SQL语义

    ```go
    param:if(1,sleep(10),`code`)
    SQL语句:SELECT * FROM `products`WHERE `products`.`deleted_at`IS NULL ORDER BY if(1,sleep(10),`code`)
    ```

    **防护方式:**

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

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

3.png

**防护方式:**

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

4.png

水平越权:

1.  黑灰产场景,订单查询功能提供订单id即可查询订单详情,这里攻击者可以遍历orderId获取其他用户的订单信息
2.  **防护方式:**
    *   涉及资源id尽量不要使用短id(遍历难度较小),同时最重要的一定要最好资源属主校验

垂直越权:

1.  普通用户访问:前端直接拦截,提示无权限
2.  管理员用户访问:判定是管理员,可以直接访问

5.png

  • SSRF

    SSRF又称服务端请求伪造攻击,指攻击者利用后端服务器为跳板,让后端服务器向非预期网络地址(主要指内网地址)发出恶意请求,获取敏感信息或执行恶意操作。

    服务端流程:服务端请求stockApi,获取结果返回

    攻击者:将stockApi参数改为内网地址,访问内网资源

6.png

**防护方式:**

*   对url的host进行白名单过滤,获取对host解析的ip进行判定,是否是内网地址
  • 文件上传漏洞

    找到公开的上传点(如视频创作/文章创作/客服反馈等),上传恶意文件(恶意视频,图片),获取图片url,然后直接分享url至外部恶意网站或QQ/微信群

    防护方案:

    • 限制文件类型:如果系统只需要图片类型,可以从服务端解析文件格式,限制只能传入特定的文件格式。
    • 站库分离:应用部署的位置和上传的文件分离,一般可以用TOS,OSS等进行文件储存
    • 防止图床:对图片访问链接进行限制,包括时间限制,访问身份限制等

4,客户端漏洞预防

  • 开放重定向

    某些需要重定向到其他站点的功能,往往在参数中携带需要重定向的url,但实际程序逻辑没用控制好重定向的范围,导致攻击者可以构造恶意链接,诱导用户重定向到恶意站点

    危害:钓鱼攻击

    修复方案:

    • 对重定向严格进行白名单控制,并正确校验匹配白名单
  • XSS

    跨站脚本(XSS)攻击:本质是一种Script代码注入,攻击者往目标web页面里插入恶意Script代码,当用户访问页面(又客户端时需要交互)时,嵌入其中web里面的Script代码会被执行,从而打到恶意攻击用户的目的

    场景:反射型,存储型,Dom型

    危害:通常的危害包括窃取用户敏感信息,以用户身份执行敏感操作

7.png

攻击者一般操作:

1.  构造恶意链接,将username设置为恶意payload
2.  攻击者通过网站反馈入口,向管理员/运营人员发送恶意链接
3.  攻击者的服务器成功收到管理员/运营人员的Session Cookie
4.  浏览器替换cookie为管理员的,获取管理员权限

**防护方法:**

*   输入过滤:对输入的特殊字符进行拦截,禁止前端提交特殊字符

*   输出过滤:

    *   当字符输出到Dom的时候,对危险字符进行html encode,避免XSS
    *   使用vue/react等框架的时候,避免使用危险指令,而应该使用安全指令。v-html/v-text

*   富文本场景:比如文章发布场景,本身是需要提供富文本功能,这时候需要严格限制tag和attribute,可以在代码层面做白名单或黑名单

    <tag attribute1='value1' attribute2='value2'>

*   CSP:用户缓解XSS,理念是对当前站点允许加载什么源的资源,发送什么请求能进行限制

    Content-Security-Policy:default-src 'self';img-src \*; media-src example.org example.net;script-src userscripts.example.com
  • CSRF

    跨站请求伪造(CSRF):允许攻击者诱导用户访问恶意链接,执行用户非预期执行的操作。

    危害:用户执行敏感操作,如关注其他用户,或者更改账号的安全邮箱等。

    防护方式:核心是判断请求的来源

    1. CSRF tokens:首次访问时给客户端传递一个token,客户端每次访问的时候都必须带上此token才能访问
    2. SameSite cookies:Strick -> Lax(Default) -> None,核心是禁止某些场景发送第三方cookie
    3. Referer-based validation:校验Referer来源是否是合法站点
  • 点击劫持

    一种在网页中将恶意代码等隐藏在看似无害或者存在诱导的内容(如按钮)之下,并诱使用户点击的手段,用户点击后往往会执行一些非预期的操作

8.png

漏洞利用步骤:

1.  参考如下代码构造钓鱼页面链接
2.  发送链接给其他用户
3.  用户访问链接,点击Win 300\$的时候,实际是点击Delete Acount

9.png

**防护方式:防护的核心是不让非预期的网站iframe我的站点**

*   X-Frame-Options:DENY/SAMEORIGIN

*   CSP:frame-ancestors指令,用于设置允许frame的source列表。

    Content-Security-Policy:frame-ancesstors <space separated list of sources>;

    Content-Security-Policy:frame-ancesstors 'self' <https://example.org> <https://example.com> <https://store.example.com>;
  • CORS跨域配置错误

    全称“跨域资源共享”(cross-origin-resource sharing),用以解决网页应用跨域访问的需求

    CORS错误配置:CORS本身不存在漏洞,而是由于开发者在配置CORS过程中,错误配置跨域访问Allow List,导致非预期的站点可以进行跨域访问,最终可能发哦之信息泄露

    常见几种错误配置:

10.png

**防护方式:核心是正确设置跨域白名单**

*   代码层:Middleware统一处理
*   网关层:Nginx反代统一拦截处理
  • WebSocket

    区别于http,只是不同的交互协议,本质上http服务端的漏洞,在Websocket上也可能存在,因此重点讨论Websocket架构的一些问题

    1. WSS和WS:WSS(WebSocket over SSL/TLS),提供加密信道。杜绝掉一些中间人攻击

    2. 数据校验:SQL/XSS/RCE等漏洞仍然可能存在

    3. CSWSH:Cross-Site WebSocket Hijacking,即在使用cookie作为认证方式时候,如果WebSocket服务端没有校验好请求来源(Origin),将导致websocket会话劫持

      黑产设置钓鱼页面,用户一旦访问后,用户websocket会话就可能会被监听

11.png

    **CSWSH防护手段:**

    *   Cookie鉴权:限制请求的Origin

    *   ticket/token鉴权:http服务提供接口,用于获取临时身份凭证,并传递到WebSocket的初始化流程中
       

12.png

5,总结/注意事项:

  • 网站运营者:网络运营者应当采取技术措施和其他必要措施,确保其收集的个人信息安全,防止信息泄露,损毁,丢失,在发生或者可能发生个人信息泄露,丢失的情况是,应当立即采取补救措施,按照规定及时告知用户并向有关主管部门报告。
  • 组织/个人:任何个人和组织不得窃取或者以其他非法方式获取个人信息,不得非法出售或者向他人提供个人信息