Web常见的网络安全问题与原理简析

1. CSRF攻击【重点】

文章:https://www.cnblogs.com/lovesong/p/5233195.html

简述:

CSRF(Cross Site Request Forgery),中文是跨站点请求伪造。CSRF攻击者在用户已经登录目标网站之后(记录了 Cookie 信息),诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。

20191015144808.png

其重点在于制造两种条件:

  1. 登录受信任网站 A,并在本地生成 Cookie 。
  2. 在不退出 A 的情况下,访问危险网站 B。

举例

假如博客园有个加关注的GET接口,blogUserGuid参数很明显是关注人Id,如下:

1
http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx?blogUserGuid=4e8c33d0-77fe-df11-ac81-842b2b196315

那我只需要在我的一篇博文内容里面写一个img标签:

1
<img style="width:0;" src="http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx?blogUserGuid=4e8c33d0-77fe-df11-ac81-842b2b196315"   />

那么只要有人打开我这篇博文,那就会自动关注我。

预防:

CSRF 的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的 CSRF 防御也都在服务端进行。

服务端的预防 CSRF 攻击的方式方法有多种,但思想上都是差不多的,主要从以下 2 个方面入手:

  1. 正确使用 GET , POST 和 Cookie;
  2. 在非 GET 请求中增加伪随机数;

GoLang 的防御示例

2. 越权操作

文章:https://blog.csdn.net/tanzhen1991910/article/details/53220593

简述:

越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽未对信息进行增删改查的时候没有进行一个判断,判断所需要操作的信息是否属于对应的用户,可以导致用户A可以操作其他人的信息。​

权限攻击可以分为水平权限攻击和垂直权限攻击。

水平权限攻击

水平权限攻击,也叫作访问控制攻击。Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或者在判断数据所属人时从用户提交的表单参数中获取了userid。导致攻击者可以自行修改userid修改不属于自己的数据。所有的更新语句操作,都可能产生这个漏洞。

从用户的加密认证cookie中获取当前用户id,并且在执行的sql语句中加入当前用户id作为条件语句,这样能防止攻击。

垂直权限攻击

垂直权限攻击又叫做权限提升攻击。其原理是由于Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。

这种攻击很容易防御,只需要在每个页面的加载之前进行权限验证即可。一个普通的权限系统,菜单是通过数据库中对应权限和角色来进行字符串拼接形成的,而不是静态的通过在页面上进行权限判断决定的。

3. SQL注入攻击

文章:https://www.jianshu.com/p/078df7a35671

简述

Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。

预防

  • 严格限制 Web 应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害。
  • 检查输入的数据是否具有所期望的数据格式,严格限制变量的类型,例如使用 regexp 包进行一些匹配处理,或者使用 strconv 包对字符串转化成其他基本类型的数据进行判断。
  • 对进入数据库的特殊字符(’”\ 尖括号 &*; 等)进行转义处理,或编码转换。Go 的 text/template 包里面的 HTMLEscapeString 函数可以对字符串进行转义处理。
  • 所有的查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中,即不要直接拼接 SQL 语句。例如使用 database/sql 里面的查询函数 PrepareQuery,或者 Exec(query string, args ...interface{})
  • 在应用发布之前建议使用专业的 SQL 注入检测工具进行检测,以及时修补被发现的 SQL 注入漏洞。网上有很多这方面的开源工具,例如 sqlmap、SQLninja 等。
  • 避免网站打印出 SQL 错误信息,比如类型错误、字段不匹配等,把代码里的 SQL 语句暴露出来,以防止攻击者利用这些错误信息进行 SQL 注入。

4. ARP攻击

文章:https://www.cnblogs.com/manue1/p/4462327.html

原理:

ARP欺骗攻击建立在局域网主机间相互信任的基础上的

当A发广播询问:我想知道IP是192.168.0.3的硬件地址是多少?

此时B当然会回话:我是IP192.168.0.3我的硬件地址是mac-b,

可是此时IP地址是192.168.0.4的C也非法回了:我是IP192.168.0.3,我的硬件地址是mac-c。而且是大量的。

所以A就会误信192.168.0.3的硬件地址是mac-c,而且动态更新缓存表

这样主机C就劫持了主机A发送给主机B的数据,这就是ARP欺骗的过程。

假如C直接冒充网关,此时主机C会不停的发送ARP欺骗广播,大声说:我的IP是102.168.0.1,我的硬件地址是mac-c,

此时局域网内所有主机都被欺骗,更改自己的缓存表,此时C将会监听到整个局域网发送给互联网的数据报。

5. XSS跨站请求攻击【重点】

XSS 通常可以分为两大类:一类是存储型 XSS,主要出现在让用户输入数据,供其他浏览此页的用户进行查看的地方,包括留言、评论、博客日志和各类表单等。应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面时就可能受到攻击。这个流程简单可以描述为:恶意用户的 Html 输入 Web 程序 -> 进入数据库 -> Web 程序 -> 用户浏览器。另一类是反射型 XSS,主要做法是将脚本代码加入 URL 地址的请求参数里,请求参数进入程序后在页面直接输出,用户点击类似的恶意链接就可能受到攻击。

XSS 目前主要的手段和目的如下:

  • 盗用 cookie,获取敏感信息。
  • 利用植入 Flash,通过 crossdomain 权限设置进一步获取更高权限;或者利用 Java 等得到类似的操作。
  • 利用 iframe、frame、XMLHttpRequest 或上述 Flash 等方式,以(被攻击者)用户的身份执行一些管理动作,或执行一些如:发微博、加好友、发私信等常规操作,前段时间新浪微博就遭遇过一次 XSS。
  • 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
  • 在访问量极大的一些页面上的 XSS 可以攻击一些小型网站,实现 DDoS 攻击的效果

原理:

  • 在新浪博客写一篇文章,同时偷偷插入一段<script>
  • 攻击代码中,获取cookie,发送自己的服务器
  • 发布博客,有人查看博客内容
  • 会把查看者的cookie发送到攻击者的服务器

预防:

  • 前端替换关键字,例如替换<为&lt;>为&gt;
  • 后端替换
  • Chrome 针对 XSS 攻击有防御措施