2024字节青训营笔记(十) 网络常见安全漏洞 | 豆包MarsCode AI刷题

113 阅读6分钟

服务端漏洞

  • 第三方组件漏洞。开源的第三方库可能存在可被利用的安全漏洞,使用这些库的项目会有安全风险。解决方案:如java有Maven插件dependency-check-maven,会利用已知并收录的漏洞库,与项目中的依赖作比较,从而导出项目中存在的风险依赖的网页文件。 image.png

  • SQL注入。就是在利用前端传来的数据去做数据库操作时,直接做了拼接操作,利用了数据库的一些语法机制,去触发非法操作。如下面的非法访问数据的情况。除此之外还可能会导致越过身份验证、甚至数据被删除等。

    username = request.POST['username']
    # username 实际为 ' OR '1'='1
    
    query = "SELECT * FROM users WHERE username = '" + username + "'"
    # query 实际为 SELECT * FROM users WHERE username = '' OR '1'='1'
    

    解决方案:

    • 不要用+这个字符串连接符做SQL的数据插入,要使用预编译或者ORM框架。
    • 基于框架的SQL生成:注意框架的API用法,因为框架也可以支持单纯的字符串拼接,除特殊情况之外,不要直接做拼接。安全的API会将要插入的数据做下转义,上面的例子会被改为下面的情况。注意对于前端传入的字符串的单引号做了\的转义,这样就不会被数据库解释为具有分隔意义的单引号,而是一个单纯的字符了。
    SELECT * FROM users WHERE username = '\' OR \'1\'=\'1'
    
    • 复杂情况下,在SQL拼接前手动转义。
  • 命令执行:有些场景需要服务端接收前端数据,然后拼接为操作系统上可执行的command,然后执行。其实原理和SQL注入一致,都是根据语法传入了一些很特别的数据。应对方案也是校验、转义、给特殊token设黑白名单等。

  • 越权漏洞:垂直越权即低权限用户能使用高权限用户的操作。水平越权即能获取、操作同等权限的其他用户的私密数据等。应对方案就是设计合理的权限模型,然后在服务端的网关处也做权限校验而不是只在前端做判断。

  • SSRF:服务端请求伪造工具。就是有些内网接口不直接提供对外访问,仅供内网服务器相互调用。可以通过一些操作通过对外的接口访问内网的不对外数据。比如传上去localhost地址,在服务器上就会通过localhost获取服务器上的数据了。解决方案:对于这个例子就是在域名解析上做黑白名单过滤。

  • 文件上传漏洞:这里看不太懂,意思大概就是上传了一些服务端能直接执行的解释型语言的脚本之后,在下一次获取该文件时会调用此脚本并做一些操作。这是危险的。应对方案一个是限制上传文本的格式;第二个是站库分离,比如服务端只作为一个文件接收和下载的对外接口和中介,文件最终存在云存储服务上。 image.png

  • 最后一个我不太认为是漏洞,但还是记录下。其实就是图床不做防盗链等配置,被用做免费云存储了。这种会损坏这个网站的利益。应对方案就是建立IP域名的访问白名单、设置访问时限等。

客户端漏洞

  • 开放重定向。感觉是SSR项目会存在的问题。有个接口专门用于重定向,但是又不做太多限制。攻击者可以利用这个接口,设置恶意链接的重定向,诱导用户跳转到恶意站点。(感觉那些会导致跳转到エロ网站的情况就是因为这个漏洞)。应对方案:校验、黑白名单过滤。 image.png

  • XSS(跨站脚本攻击):比如很常见的在评论区输入while(true)alert("1")的操作,就是一种攻击,如果没有做一些转义等操作,会影响其他打开这个评论区的用户的正常使用。本质是用户自己输入的字符串成功地被网站解析为脚本并执行了。更严重的例子就是攻击者将一个获取当前用户的cooie、session、token并上传到远程服务器的脚本保存到网站上,这个脚本如果被普通用户、管理员等角色获取,攻击者就能通过这些登录凭证获得相应权限。XSS攻击算是很基础也很危险的攻击了。 应对方案:

    • 对用户提交的表单输入做校验、过滤,防止上传特殊字符。
    • 对特殊字符做转义。比如<改为&lt;
    • 像vue提供了v-html这种,尽量不要使用。
    • 富文本和markdown场景,这种专门将文本转为HTML标签的工具是非常容易出现XSS攻击的,需要做一些黑白名单配置。
    • CSP:其实就是个黑白名单设置当前网站能访问的外部资源和能向什么地方发请求。这样就不会通过网络请求获取外部恶意脚本以及将重要数据发送给攻击者的服务器了。
  • CSRF(跨站伪造请求):例子就是通过短信或者邮箱给受害者发了假网站,让用户登录。表面上用户这边显示登录成功,实际上假网站的后端先拿着表单数据去真网站登录成功,然后再修改这个账号的密码,实现了盗号。这里的漏洞点就在于假网站可以去访问真网站接口。应对方案就是

    • 对每个会话给一个登录凭证。至少要先登录才能访问接口。
    • SameSite cookies:禁止某些场景发送第三方cookies。
    • Referer-based validation:检验Referer来源是否是合法站点。
  • 点击劫持:其实就是在真网站上的重要按钮上放一个透明、更上层的iframe、假按钮,用户点击会触发恶意事件。

    image.png

  • CORS配置错误:开发者配置的有问题。应对方案就是正确编写配置,可以在代码层做判断,或者在中间件如Nginx、网关层等位置做判断。

  • WebSocket:ws就是建立了一个双向通信的连接,存在的问题就是连接被监听、劫持这些。应对方案有使用WSS(ws+ssl/tls)、建立时带凭证做鉴权等。