常见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转义(如<转义为
<
- 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安全问题概念介绍以及防御方法的主要内容,如果未能解决你的问题,请参考以下文章