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

96 阅读3分钟

服务端漏洞

第三方组件漏洞

防护方式

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

SQL注入漏洞

SQL注入(SQL Injection),是最常见影响非常广泛的漏洞。攻击者通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,从而入侵数据库来执行未授意的任意查询。

防护方式

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

SSRF

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

防护方式

对url的host进行白名单过滤,获取对host解析的ip进行判定,是否是内网地址。

文件上传

防护方式

限制文件类型:如果系统只需要图片类型,可以从服务端解析文件格式,限制只能传入特定的文件格式

站库分离:应用部署的位置和上传的文件分离,一般可以使用TOS、OSS等进行文件存储

防护图床:对图片访问链接进行限制,包括时间、身份限制等

客户端漏洞

XSS

SS(Cross Site Script),与SQL注入相似,XSS是通过网页插入恶意脚本,主要用到的技术也是前端的HTML和JavaScript脚本。当用户浏览网页时,实现控制用户浏览器行为的攻击方式。 一次成功的XSS,可以获取到用户的cookie,利用该cookie盗取用户对该网站的操作权限;也可以获取到用户联系人列表,利用被攻击者的身份向特定的目标群发送大量的垃圾信息,等等。

防护方法:

  • 输入过滤:对输入的特殊字符进行拦截,禁止前端提交特殊字符
  • 输出过滤:当字符输出到Dom时,对危险字符进行html encode;使用vue/react等框架时,避免使用危险指令,使用安全指令
  • 富文本场景:例如文章发布,需要严格控制tag和attribute,可以在代码层面做白名单或黑名单
  • CSP:当前站点允许加载什么源的资源、发送什么请求进行限制

CSRF

CSRF(Cross Site Request Forgery),利用已登录的用户身份,以用户的名义发送恶意请求,完成非法操作。

防护的方式

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

点击劫持

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

防护方式

核心是不让非预期的网站 iframe 站点