常见web安全问题概念介绍以及防御方法

Posted 刘翾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见web安全问题概念介绍以及防御方法相关的知识,希望对你有一定的参考价值。

文章目录

1. XSS ( 跨站脚本攻击 )

定义: 通过恶意攻击者往WEB页面插入恶意JS代码, 当用户浏览, 嵌入的代码会被执行, 达到恶意攻击用户控制浏览器的目的. xss是代码注入的一种.

1.2. 分类

1.2.1. Reflected XSS 反射型

攻击者将跨站代码写在链接中, 受害者请求这种连接时, 跨站代码经过服务端反射回来触发, 此类代码不会存储到服务端. 主要是由于服务端接收到客户端的不安全输入,在客户端触发执行从而发起 Web 攻击.

例如: 搜索关键词填入<script>alert('handsome boy')</script>, 点击搜索。页面没有对关键词进行过滤,这段代码就会直接在页面上执行,弹出 alert

1.2.2. Stored XSS 存储型

攻击者将恶意数据存储到服务端的数据库中, 服务器脚本从数据库中获取该数据后, 没有进行安全处理即显示在公开页面上, 受害者访问该页面即中招. 一般提交的内容都是通过一些富文本编辑器编辑的,很容易插入危险代码

1.2.3. DOM型

由js脚本动态创建, 输出到页面造成的. 此类型不需要经过服务器.

1.3.防御方法

  • 永远不要相信用户的输入: 输入过滤, 输出转义
  • 输入: 非字符串或有固定值时, 事先进行类型/值检查
  • 输出: 进行html转义(如<转义为&lt
  • callback参数只允许字母, 数字, 下划线
  • Java项目使用安全包, 可使用esapi的过滤
  • php可参见开发规范

2. CSRF(跨站请求伪造)

定义: 链接的表单提交的所有请求参数都可被预测, 攻击者构造好一个站内URL或在第三方网站设置一个自动提交的表单, 当合法用户在登录状态时, 攻击者诱使其点击, 此时就会在不知情的情况下执行了攻击者伪造的请求

2.1. 检测步骤

  • 对所有增删改操作的URL进行检查, 是否在POST参数中存在token, 如果无token则存在风险.
  • 若存在token, 则token设置为空以及任意token进行重放, 检查是否能够成功执行, 如果执行成功, 则存在风险

2.2. 防御方法

  • 对所有涉及增删改的操作添加csrftoken, 并于服务端验证: 1. 服务端生成csrftoken, 放入服务端session, 放入前端cookie中; 2. 前端url通过js抓取cookie内容带入请求head中; 3. 服务端获取head中csrftoken与之前放入的session的做比较.

3. Jsonp劫持

**定义: **为了解决跨域问题, 使用jsonp方式传输数据, 由于数据很难做到权限校验, 攻击者可以构造带有该jsonp接口的恶意页面, 发给用户点击, 从而用户的敏感数据通过jsonp接口传输到攻击者的服务器上.

例:

<html>
	<script>
		function aaa(data) 
			// 发送data到攻击者服务器
		
	</script>
	<script src="http://a.com/get?callback=aaa" />
</html>

3.1. 防御方法

  • 敏感数据尽量不要采用JSONP跨域传输.
  • 如果需要, JSONP接口的后端需要对referer进行校验, 只允许受信任的调用方域名的页面里嵌入我们的JSONP或者token
  • 域名是否受信任, 可使用安全包的URL白名单校验函数检查
  • callback 函数名词最长 50 个字符限制
  • callback 函数名只允许[,], a-zA-Z0123456789_,$, .,防止一般的 XSS,utf-7 XSS等攻击

4. 钓鱼攻击

此部分来自 https://eggjs.org/zh-cn/core/security.html#url-钓鱼 egg文档

4.1. URL钓鱼

服务端未对传入的跳转 url 变量进行检查和控制,可能导致可恶意构造任意一个恶意地址,诱导用户跳转到恶意网站。 由于是从可信的站点跳转出去的,用户会比较信任,所以跳转漏洞一般用于钓鱼攻击

4.1.1. 防御方法

  • 若跳转的 url 事先是可以确定的,包括 url 和参数的值,则可以在后台先配置好,url 参数只需传对应 url 的索引即可,通过索引找到对应具体 url 再进行跳转;
  • 若跳转的 url 事先不确定,但其输入是由后台生成的(不是用户通过参数传人),则可以先生成好跳转链接然后进行签名;
  • 若 1 和 2 都不满足,url 事先无法确定,只能通过前端参数传入,则必须在跳转的时候对 url 进行按规则校验:判断 url 是否在应用授权的白名单内

4.2. 图片钓鱼

如果可以允许用户向网页里插入未经验证的外链图片,这有可能出现钓鱼风险。

比如常见的 401钓鱼, 攻击者在访问页面时,页面弹出验证页面让用户输入帐号及密码,当用户输入之后,帐号及密码就存储到了黑客的服务器中。 通常这种情况会出现在<img src=$url />中,系统不对$url是否在域名白名单内进行校验

4.2.1. 防御方法

  • 对于<a href=""/><img src=""/>此类标签的url首先要进行转义, 防止xss, 并做域名白名单

4.3. iframe 钓鱼

iframe 钓鱼,通过内嵌 iframe 到被攻击的网页中,攻击者可以引导用户去点击 iframe 指向的危险网站,甚至遮盖,影响网站的正常功能,劫持用户的点击操作。

4.3.1. 防御方法

设置X-Frame-Options 这个安全头来防止iframe 钓鱼。默认值为 SAMEORIGIN,只允许同域把本页面当作 iframe 嵌入


5. SSRF 服务端请求伪造

一般来说,SSRF 安全漏洞常见于开发者在服务端直接请求客户端传递进来的 URL 资源,一旦攻击者传入一些内部的 URL 即可发起 SSRF 攻击。

5.1. 防御方法

配置黑白名单

以上是关于常见web安全问题概念介绍以及防御方法的主要内容,如果未能解决你的问题,请参考以下文章

XSS跨站漏洞 加强Web安全

3大Web安全漏洞防御详解:XSS、CSRF、以及SQL注入解决方案

常见 Web 安全攻防总结

常见web安全攻防总结

:网络协议第20节:Web开发安全

常见六大Web 安全攻防解析