网站常见安全漏洞 | 青训营

84 阅读5分钟

服务端漏洞

  • 第三方组件漏洞 Java可以使用dependency-check-maven检查项目以来的组件是否存在安全漏洞

SQL 注入

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

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

命令执行

防护方式:

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

越权漏洞

SSRF

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

文件上传漏洞

防护方案:

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

客户端漏洞

开放重定向

  • 开放重定向:某些需要重定向到其他站点的功能,往往在参数中携带需要重定向的URL,但实际程序逻辑没有控制好重定向的范围,导致攻击者可以构造恶意链接,诱导用户重定向到恶意站点。
  • 危害:钓鱼攻击
  • 修复方案:对重定向严格进行白名单控制并正确校验匹配白名单。

XSS

  • 跨站脚本(XSS)攻击:本质是一种Script代码注入,攻击者往目标Web页面里插入恶意Script代码,当用户访问页面(有客户端时需要交互)时,嵌入其中Web里面的Script代码会被执行从而达到恶意攻击用户的目的。
  • 场景:反射型,存储型,Dom型
  • 危害:通常的危害包括窃取用户敏感信息,以用户身份执行敏感操作。
  • 防护方法:
    1. 输入过滤:对输入的特殊字符进行拦截,禁止前端提交特殊字符
    2. 输出过滤:
      1. 当字符输出到Dom时候,对危险字符进行html encode,避免XSS.
      2. 使用vue/react等框架时候,避免使用危险指令,而应该使用安全指令。v-html/v-text
    3. 富文本场景:比如文章发布场景,本身是需要提供富文本功能,这时候需要严格限制tg和attribute,可以在代码层面做白名单或者黑名单。
    4. CSP:用于缓解XSS,理念是对当前站点允许加载什么源的资源、发送什么请求能进行限制。

CSPF

  • 跨站请求伪造(CSRF):允许攻击者诱导用户访问恶意链接,执行用户非预期执行的操作。
  • 危害:用户执行敏感操作,如关注其他用户,或者更改账号的安全邮箱等。
  • 防护方式:防护的核心是判断请求的来源
    1. CSRF tokens:首次访问时候给客户端传递一个 token,客户端每次访问时候都必须带上此 token 才能访问。
    2. SameSite cookies:Strick->Lax(Default)->None.核心是禁l止某些场景发送第三方cookie.
    3. Referer-based validation:校验Referer来源是否是合法站点。

点击劫持

是一种在网页中将恶意代码等隐藏在看似无害或者存在诱导的内容(如按钮)之下,并诱使用户点击的手段,用户点击后往往会执行一些非预期的操作。 防护方式:防护的核心是不让非预期的网站iframe我的站点

  1. X-Frame-Options:DENY SAMEORIGIN
  2. CSP:frame-ancestors指令,用于设置允许frame的source:列表。

CORS跨域配置错误

CORS:全称是“跨域资源共享”(Cross-originresource sharing),用以解决网页应用跨域访问的需求。 CORS错误配置:CORS本身不存在漏洞,而是由于开发者在配置CORS过程中,错误配置跨域访问 Allow List,导致非预期的站点可以进行跨域访问,最终可能导致信息泄漏。

WebSocket

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

  1. WSS和WS:WSS (WebSockets over SSL/TLS),提供加密信道。杜绝掉一些中间人攻击。
  2. 数据校验:SOL/XSS/RCE等漏洞仍然可能存在
  3. CSWSH:Cross-Site WebSocket Hijacking,即在使用cookie作为认证方式时候,如果WebSocket服务端没有校验好请求来源(Origin),将导致WebSocket会话劫持。

CSWSH防护手段:

  1. Cookie鉴权:限制请求的Origin.
  2. ticket/token鉴权:http服务提供接口,用于获取临时的身份凭证,并传递到WebSocket的初始化流程中