Web开发安全

简介: Web开发安全
参加字节跳动的青训营时写的笔记。

1. 攻击

1.1 跨站脚本攻击(XSS)

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。

如填写表单信息时,如果盲目相信用户的提交内容,那么假如用户填写了类似 <script>alert("注入恶意代码")</script>的信息,然后直接通过element.innerHTML把用户提交的代码存起来的话,那么工具者就可以实现攻击了。

比较巧妙的攻击方式:

image-20220127180108501

XSS特点

  • 通常难以从UI上发现,因为是在暗地里执行脚本
  • 可以窃取用户信息(cookie、token)
  • 还可以绘制UI(如弹窗),诱骗用户点击

demo:

image-20220127173357726

1.1.1 Stored XSS

把恶意脚本存储在被攻击网站的数据库中。当其他人访问页面时,回去读数据,然后就会执行到数据库中的恶意脚本,从而被攻击。危害最大,对全部用户可见

1.1.2 Reflected XSS

  • 不涉及数据库
  • 从URL上进行攻击

image-20220127174047613

1.1.3 DOM-based XSS

  • 不需要服务器的参与
  • 恶意攻击的发起、执行,都在浏览器完成

image-20220127174625118

和Reflected XSS很像,不过,Reflected XSS的恶意脚本是注入到服务器中,而DOM-based XSS的恶意脚本是注入到浏览器中,而且攻击不需要服务器的参与

1.1.4 Mutation-based XSS

  • 利用浏览器渲染DOM的特性(独特优化)
  • 按浏览器进行攻击

2. 跨站伪造请求CSRF

CSRF攻击:在用户不知情的前提下,利用用户权限(cookie),构造HTTP请求,窃取或修改用户敏感信息。

image-20220127180459599

经典例子:银行转账

首先,a为了转账给b10000元,于是a登录银行页面进行转账操作, 还没有推出登录,又收到中奖通知链接(假的或者是只有小额鱼饵),a点击链接,并点击领奖按钮。然后发现钱被转走了100000元了。

CSRF攻击原理:利用cookie的自动携带特性,在其他网站向你的网站发送请求时,如果网站中的用户没有退出登录,而发送的请求又是一些敏感的操作请求(如转账),则会给用户带来巨大的损失。

3. 注入攻击injection

3.1 SQL注入

image-20220127202310672

demo

image-20220127202606829

4. Dos

通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而引起雪崩效应。

4.1 ReDoS

例子:上网找到了讲的非常好的文章

正则表达式所引发的DoS攻击(ReDoS)

4.2 Distributed DOS(DDoS)

短时间内,来自大量僵尸设备的请求,服务器不能及时响应全部请求,导致请求堆积,进而引发雪崩效应,无法响应新请求。

攻击特点:

  • 直接访问IP
  • 任意API
  • 消耗大量带宽(耗尽)

DDoS攻击 demo:SYN Flood

原理:TCP的三次握手

image-20220127205207771

如果客户端给服务器发送的ACK丢失的话,服务器不知道丢失,会等客户端的ACK,超时后重新发送SYN-ACK消息给客户端,直到重试超过一定次数才会放弃。

而SYN Flood就是通过发送大量的SYN,但是不给服务器发送ACK,从而耗尽服务器的资源。

image-20220127205705566

5. 中间人攻击

image-20220127205738271

2. 防御

2.1 XSS

方案:

  • 永远不信任用户的提交内容
  • 不把用户提交内容直接转换成DOM

现成工具:

  • 前端:

    • 主流框架默认防御XSS
    • google-closure-library
  • 服务端(Node):

    • DOMPurify

2.2 CSRF

2.2.1 同源政策

浏览器的同源政策:A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同"。(出自阮一峰的网络日志)

  • 协议相同
  • 域名相同
  • 端口相同

同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。

image-20220127230913468

2.2.2 CSP

CSP(Content Security Policy):内容安全策略

  • 决定好哪些源(域名)是安全的
  • 来自安全源的脚本可以执行,否则直接报错
  • 对于eval / inline script 直接禁止

两种形式:

  • 服务器的响应头部:

    image-20220127232201451

  • 浏览器meta

    image-20220127232216808

2.2.3 CSRF防御(token)

image-20220127232639659

2.2.4 SameSite Cookie

避免用户信息被携带

下面的部分参考自Cookie 的 SameSite 属性

Cookie的SameSite属性用来限制第三方Cookie,从而减少安全风险。

可以设置成三个值:

  • Strict:最严格。完全禁止第三方Cookie,跨站点时,任何情况都不会发送Cookie

    Set-Cookie: CookieName=CookieValue; SameSite=Strict;

    用户体验不会很好。比如访问别人的项目网站时,有个fork me链接到github,然后点击跳转不会带有github的token,所以跳转过后,都会是未登录状态

  • Lax:大多数情况不发送第三方Cookie,但是导航到目标地址的GET请求会发送。

    Set-Cookie: CookieName=CookieValue; SameSite=Lax;

    导航到目标地址的GET请求:链接、预加载、GET表单

    image-20220127234433512

    设置了Strict或Lax之后,基本杜绝了CSRF攻击。

  • None:显示关闭SameSite属性。前提是需要同时设置Secure属性(Cookie只能通过HTTPS协议发送),否则无效

    Set-Cookie: widget_session=abc123; SameSite=None; Secure    

    应用场景是依赖Cookie的第三方服务:如网站内嵌其他网站的播放器,开启SameSite属性后,就识别不了用户的登录态,也就发不了弹幕了

2.2.5 SameSite和CORS的区别

image-20220127235222723

2.3 Injection

image-20220127235528020

貌似是Java中的,我没用过,也不好说。不过查了下资料,prepareStatement对象防止sql注入的方式是把用户非法输入的单引号用\反斜杠做了转义,从而达到了防止sql注入的目的。

在SQL语句外做的防御

image-20220127235830052

2.4 Dos

2.4.1 ReDoS

  • Review代码
  • 代码扫描 + 正则性能测试
  • 拒绝使用用户提供的正则

2.4.2 DDoS

image-20220128000235944

2.5 防御中间人攻击

HTTPS防止中间人攻击

HTTPS 其实是SSL+HTTP的简称,当然现在SSL基本已经被TLS取代了

image-20220128000730701

HTTPS的一些特性

  • 可靠性:加密(非明文)
  • 完整性:MAC验证(防篡改),通过hash算法来实现,所以就算只有很小的改变,hash输出结果也会变化很大
  • 不可抵赖性:数字签名(确定身份)
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
15天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
26天前
|
Web App开发 前端开发 开发工具
介绍Web开发的基础知识
介绍Web开发的基础知识
26 7
|
26天前
|
安全
网易web安全工程师进阶版课程
《Web安全工程师(进阶)》是由“ i春秋学院联合网易安全部”出品,资深讲师团队通过精炼的教学内容、丰富的实际场景及综合项目实战,帮助学员纵向提升技能,横向拓宽视野,牢靠掌握Web安全工程师核心知识,成为安全领域高精尖人才。 ## 学习地址
23 6
网易web安全工程师进阶版课程
|
1天前
|
JSON Java fastjson
Spring Boot 底层级探索系列 04 - Web 开发(2)
Spring Boot 底层级探索系列 04 - Web 开发(2)
11 0
|
1天前
|
安全 编译器 PHP
PHP 8.1版本发布:引领Web开发新潮流
PHP编程语言一直是Web开发的主力军,而最新发布的PHP 8.1版本则为开发者们带来了更多创新和便利。本文将介绍PHP 8.1版本的主要特性,包括更快的性能、新的语言功能和增强的安全性,以及如何利用这些功能来提升Web应用程序的质量和效率。
|
4天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
4天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
9天前
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
|
9天前
|
SQL 安全 PHP
CTF--Web安全--SQL注入之Post-Union注入
CTF--Web安全--SQL注入之Post-Union注入
|
13天前
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发涉及Java基础、Servlet、JSP、数据库操作(SQL+JDBC)、MVC设计模式、Spring框架、Hibernate ORM、Web服务(SOAP&RESTful)、安全认证(HTTP Basic/Digest/OAuth)及性能优化(缓存、异步、负载均衡)。
15 3

热门文章

最新文章