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

116 阅读3分钟

网络安全漏洞

网络安全漏洞,即网络系统在需求、设计、实现、配置、运行等过程中,无意或有意产生的缺陷或薄弱点。有些人就会利用这些漏洞,破坏或控制系统,去达到自己的目的。

网络安全漏洞又分服务端漏洞和客户端漏洞

服务端漏洞

SQL注入

定义

在用户输入的字符串中加入 SQL 语句,如果在设计不良的程序中忽略了检查,那么这些注入进去的 SQL 语句就会被数据库服务器误认为是正常的 SQL 语句而运行,从而实现在未授权的情况下获得数据库中的数据

原理
  1. 恶意拼接查询
  2. 利用注释执行非法命令
  3. 传入非法参数
  4. 添加额外条件
防护方式
  1. 尽量不要基于DB的Raw方法拼接构造SQL语句,而应该使用预编译、ORM框架
  2. 使用ORM框架时,应该注意框架中的特性,可能存在不安全的写法导致的SQL注入问题
  3. 在复杂场景一定要使用拼接SQL,需要对外部输入进行转义

命令执行

定义

当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。

原理

将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。

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

客户端漏洞

XSS

定义

通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。

原理

网站将用户输入内容当做前端代码执行

防护方式
  1. 输入过滤:对输入的特殊字符进行拦截,禁止前端提交特殊字符

  2. 输出过滤:

    a.当字符输出到Dom时候,对危险字符进行htmlencode,避免XSS

    b.使用vue/react等框架时候,避免使用危险指令,而应该使用安全指令。v-html/v-text

  3. 富文本场景:比如文章发布场景,本身是需要提供富文本功能,这时候需要严格限制tag和attribute,可以在代码层面做白名单或者黑名单。

跨站请求伪造(CSRF)

定义

一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

原理

攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。

防护方式(判断请求来源)
  1. CSRFtokens:首次访问时候给客户端传递一个token,客户端每次访问时候都必须带上此token才能访问。
  2. SameSitecookies:Strick->Lax(Default)->None.核心是禁止某些场景发送第三方cookie
  3. Referer-basedvalidation:校验Referer来源是否是合法站点