服务端漏洞
第三方组件漏洞
防护方式
针对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 站点