常见的web安全的涉及内容
-
XSS攻击
-
CSRF攻击
-
SQL注入
-
HTTP中间人
-
密码安全
-
传输安全
XSS攻击
什么是XSS
根据攻击来源XSS攻击可分为三种类型
- 反射型
- 存储型
- DOM型
反射型
反射型XSS是把用户输入的数据(不可信数据)从服务器反射给用户浏览器,当用户的输入或者一些用户可控参数未经处理地输出到页面上,就容易产生xss漏洞。
攻击流程
漏洞常见于通过url传递参数的功能,如搜索等。攻击者构造一个带有恶意代码的url,当用户打开带有恶意代码的url,网站服务端将恶意代码从url中取出,拼接在HTML中返回给浏览器,用户浏览器解析后恶意代码也会执行,恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行操作
先来看一个简单的搜索:例如百度,发现我们的搜索词,会挂在链接上,而且会在搜索框中展示
假设有一个没有做过XSS防范的网站,我们将链接写为:
https://www.baidu.com/s?wd=<script>alert(1)</script>
这时发现因为网站没有做XSS过滤,我们写过的一些东西都会被执行到页面之中
存储型
存储型(或HTML注入型/持久型)XSS攻击不需要用户点击特制链接,攻击者仅需要提交攻击代码到一个网站上其他用户可能访问的地方,比如用户评论、留言板等,当用户访问时攻击代码自动执行
攻击流程
假设有一个没有防范的网站,有一个评论的功能,如果输入一段可执行的js代码存在数据库,用户查看时,内将容插入到dom中执行这段代码
存储型与反射型漏洞的区别是:存储型XSS恶意代码存在数据库中,反射型XSS的恶意代码存在url中
DOM型
DOM型XSS是通过修改页面的DOM节点形成的。攻击者构造一个含有恶意代码的url,当用户打开时前端取出url中的恶意代码并执行,攻击者就可以窃取用户信息或者冒充用户行为
假如我们页面中有一个img元素,他的图片链接是取的我们的页面参数id拼合而成,正常链接
http://localhost:9527/index?id=1
此时假如页面没有做过防范,我们将链接替换为
http://localhost:9527/index?id=1" onerror="alert(document.cookie)
此时查看页面元素
当图片加载失败时就会执行onError方法
如何防范XSS攻击
通常来说,对于XSS攻击有一些通用的防范方案,简单的介绍几种常见的防范方案
- 输入检查。对于用户的输入进行检查、转义、过滤等。建立可信任的字符和html标签白名单,对于不在白名单吧内的字符或者标签进行过滤或编码
- 输入长度控制。对于不可信的输入应该限定一个合理的长度,虽然不能完全防止但可以增加攻击的难度
- 设置HttpOnly,浏览器将禁止页面的JavaScript访问带有HttpOnly属性的cookie,来防止恶意脚本通过document.cookie访问到用户隐私数据
- 现在主流浏览器内置了防范XSS的措施,如内容安全策略(CSPdeveloper.mozilla.org/zh-CN/docs/…)
CSRF攻击
攻击步骤:
-
首先用户C浏览并登录了受信任站点A
-
登录信息验证通过以后,站点A会在返回给浏览器的信息中带上已登录的cookie,cookie信息会在浏览器端保存一定时间(根据服务端设置而定)
-
完成这一步以后,用户在没有登出(清除站点A的cookie)站点A的情况下,访问恶意站点B
-
这时恶意站点 B的某个页面向站点A发起请求,而这个请求会带上浏览器端所保存的站点A的cookie
-
站点A根据请求所带的cookie,判断此请求为用户C所发送的返回数据
特点:
1.攻击一般发起在第三方网站,而不是被攻击的网站。
2.攻击是利用受害者在被攻击网站的登录凭证,冒充受害者的操作,预测出被攻击网站的接口参数进行请求伪造
CSRF防御方法
通常来说对于CSRF攻击有一些通用的防范方案,简单介绍几种常用的方式
SameSite属性
Cookie的SameSite属性用来限制第三方Coookie,该属性设置 Cookie 不随着跨域请求发送,可以设置三个值: Strict\Lax\None
Strict
完全禁止第三方Cookie,跨站点时,任何情况下都不会发送Cookie,也就是说只有当前网页的Url与请求目标一致才会携带Cookie
Lax
大多数情况也是不发送第三方Cookie,但是导航到目标网址的Get请求除外
导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单。 SameSite属性: www.ruanyifeng.com/blog/2019/0…
同源检测
在http协议中,异步请求会携带两个Header,用于标记来源域名。
- Origin Header
- Referer Header
这两个Header在浏览器发起请求时大多数情况会自动带上,并且不能由前端自定义,服务器可以通过解析这两个人Header中的域名,确定来源域名。通过校验来源域名,可以知道请求是否从本站发出,我们可以通过拒绝非本站发出的请求来避免CSRF攻击
服务端验证 Token 是否正确
服务器下发一个随机 Token,每次发起请求时将 Token 携带上,服务器验证 Token 是否有效。
验证码
CSRF攻击往往是在用户不知情的情况下伪造请求,而验证码会强制用户必须与应用进行交互才能完成最终请求,而因为CSRF攻击无法获取到验证码,就可以有效的防范攻击,但是出于用户体验考虑不能给网站所有操作都加上验证码,所以验证码只能作为防御CSRF的辅助手段
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!