网络安全漏洞
网络安全漏洞,即网络系统在需求、设计、实现、配置、运行等过程中,无意或有意产生的缺陷或薄弱点。有些人就会利用这些漏洞,破坏或控制系统,去达到自己的目的。
网络安全漏洞又分服务端漏洞和客户端漏洞
服务端漏洞
SQL注入
定义
在用户输入的字符串中加入 SQL 语句,如果在设计不良的程序中忽略了检查,那么这些注入进去的 SQL 语句就会被数据库服务器误认为是正常的 SQL 语句而运行,从而实现在未授权的情况下获得数据库中的数据
原理
- 恶意拼接查询
- 利用注释执行非法命令
- 传入非法参数
- 添加额外条件
防护方式
- 尽量不要基于DB的Raw方法拼接构造SQL语句,而应该使用预编译、ORM框架
- 使用ORM框架时,应该注意框架中的特性,可能存在不安全的写法导致的SQL注入问题
- 在复杂场景一定要使用拼接SQL,需要对外部输入进行转义
命令执行
定义
当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。
原理
将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。
防护方式
- 对动态的值尽可能设置白名单进行验证
- 如果某些位置无法白名单,需要尝试对数据类型进行校验
- 特殊字符黑名单的过滤,或者转义
客户端漏洞
XSS
定义
通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
原理
网站将用户输入内容当做前端代码执行
防护方式
-
输入过滤:对输入的特殊字符进行拦截,禁止前端提交特殊字符
-
输出过滤:
a.当字符输出到Dom时候,对危险字符进行htmlencode,避免XSS
b.使用vue/react等框架时候,避免使用危险指令,而应该使用安全指令。v-html/v-text
-
富文本场景:比如文章发布场景,本身是需要提供富文本功能,这时候需要严格限制tag和attribute,可以在代码层面做白名单或者黑名单。
跨站请求伪造(CSRF)
定义
一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
原理
攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。
防护方式(判断请求来源)
- CSRFtokens:首次访问时候给客户端传递一个token,客户端每次访问时候都必须带上此token才能访问。
- SameSitecookies:Strick->Lax(Default)->None.核心是禁止某些场景发送第三方cookie
- Referer-basedvalidation:校验Referer来源是否是合法站点