#yyds干货盘点#web安全常见漏洞

1. SQL 注入

SQL 注入就是通过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令。

SQL 注入漏洞属于后端的范畴,但前端也可做体验上的优化。

原因

当使用外部不可信任的数据作为参数进行数据库的增、删、改、查时,如果未对外部数据进行过滤,就会产生 SQL 注入漏洞。

比如:

name = "外部输入名称";
sql = "select * from users where name=" + name;

上面的 SQL 语句目的是通过用户输入的用户名查找用户信息,因为由于 SQL 语句是直接拼接的,也没有进行过滤,所以,当用户输入 ​'' or '1'='1'​ 时,这个语句的功能就是搜索 ​users​ 全表的记录。

select * from users where name='' or '1'='1';

解决方案

具体的解决方案很多,但大部分都是基于一点:不信任任何外部输入。

所以,对任何外部输入都进行过滤,然后再进行数据库的增、删、改、查。

此外,适当的权限控制、不曝露必要的安全信息和日志也有助于预防 SQL 注入漏洞。

2. XSS 公鸡

XSS 公鸡全称跨站脚本公鸡(Cross-Site Scripting),简单的说就是公鸡者通过在目标网站上注入恶意脚本并运行,获取用户的敏感信息如 Cookie、SessionID 等,影响网站与用户数据安全。

XSS 公鸡更偏向前端的范畴,但后端在保存数据的时候也需要对数据进行安全过滤。

原因

当公鸡者通过某种方式向浏览器页面注入了恶意代码,并且浏览器执行了这些代码。

比如:

在一个文章应用中(如微信文章),公鸡者在文章编辑后台通过注入 ​​script​​​ 标签及 ​​js​​​ 代码,后端未加过滤就保存到数据库,前端渲染文章详情的时候也未加过滤,这就会让这段 ​​js​​ 代码执行,引起 XSS 公鸡。

解决方案

一个基本的思路是渲染前端页面(不管是客户端渲染还是服务器端渲染)或者动态插入 HTML 片段时,任何数据都不可信任,都要先做 HTML 过滤,然后再渲染。

3. CSRF 公鸡

CSRF 公鸡全称跨站请求伪造(Cross-site Request Forgery),简单的说就是公鸡者盗用了你的身份,以你的名义发送恶意请求。

原因

一个典型的 CSRF 公鸡有着如下的流程:

  • 受害者登录​​a.com​​,并保留了登录凭证(Cookie)
  • 公鸡者引诱受害者访问了​​b.com​
  • ​b.com​​ 向​​a.com​​ 发送了一个请求:​​a.com/act=xx​​(浏览器会默认携带​​a.com​​ 的 Cookie)
  • ​a.com​​ 接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求

解决方案

防止 CSRF 公鸡需要在服务器端入手,基本的思路是能正确识别是否是用户发起的请求。

  • ​a.com​​ 以受害者的名义执行了​​act=xx​
  • 公鸡完成,公鸡者在受害者不知情的情况下,冒充受害者,让​​a.com​​ 执行了自己定义的操作。

4. DDoS 公鸡

DoS 公鸡全称拒绝服务(Denial of Service),简单的说就是让一个公开网站无法访问,而 DDoS 公鸡(分布式拒绝服务 Distributed Denial of Service)是 DoS 的升级版。

这个就完全属于后端的范畴了。

原因

公鸡者不断地提出服务请求,让合法用户的请求无法及时处理,这就是 DoS 公鸡。

公鸡者使用多台计算机或者计算机集群进行 DoS 公鸡,就是 DDoS 公鸡。

解决方案

防止 DDoS 公鸡的基本思路是限流,限制单个用户的流量(包括 IP 等)。

5. XXE 漏洞

XXE 漏洞全称 XML 外部实体漏洞(XML External Entity),当应用程序解析 XML 输入时,如果没有禁止外部实体的加载,导致可加载恶意外部文件和代码,就会造成任意文件读取、命令执行、内网端口扫描、公鸡内网网站等公鸡。

这个只在能够接收 XML 格式参数的接口才会出现。

解决方案

  1. 禁用外部实体
  2. 过滤用户提交的XML数据

防止 DDoS 公鸡的基本思路是限流,限制单个用户的流量(包括 IP 等)。

6. JSON 劫持

JSON 劫持(JSON Hijacking)是用于获取敏感数据的一种公鸡方式,属于 CSRF 公鸡的范畴。

原因

一些 Web 应用会把一些敏感数据以 json 的形式返回到前端,如果仅仅通过 Cookie 来判断请求是否合法,那么就可以利用类似 CSRF 的手段,向目标服务器发送请求,以获得敏感数据。

比如下面的链接在已登录的情况下会返回 json 格式的用户信息:

http://www.test.com/userinfo

公鸡者可以在自己的虚假页面中,加入如下标签:

<script src="http://www.test.com/userinfo"></script>

如果当前浏览器已经登录了 ​​www.test.com​​,并且 Cookie 未过期,然后访问了公鸡者的虚假页面,那么该页面就可以拿到 json 形式的用户敏感信息,因为 ​​script​​ 标签会自动解析 json 数据,生成对应的 js 对象。然后再通过:

Object.prototype.__defineSetter__

这个函数来触发自己的恶意代码。

但是这个函数在当前的新版本 Chrome 和 Firefox 中都已经失效了。

解决方案

  1. ​X-Requested-With​​ 标识
  2. 浏览器 JSON 数据识别
  3. 禁止 Javascript 执行 JSON 数据

以上就是常见的web安全漏洞,如有缺失,还请给与补充说明。

发表评论

相关文章