【第四章:网络协议】第20节:Web开发安全


大家好,在前面两个小节中,我们对网络协议相关的知识点做了简单的介绍。本小节是网络协议篇的最后一节,主要介绍和Web开发相关的安全漏洞,包括XSS跨站脚本攻击,CSRF跨站请求伪造,SSRF服务端请求伪造以及SQL注入漏洞等。

XSS,CSRF以及SSRF,SQL注入都是Web开发中最为常见的攻击手段,日常开发中,我们必须采取有效的防御措施。所以,让我们来一起看看常见Web安全漏洞的相关技术原理吧~

(1)XSS跨站脚本攻击:

答:XSS (Cross-Site Scripting)跨站脚本攻击是一种常见的安全漏洞,恶意攻击者在用户提交的数据中加入一些代码,将代码嵌入到了Web页面中,从而可以盗取用户资料,控制用户行为或者破坏页面结构和样式等。为了和 CSS 区分,这里把攻击的第一个字母改成了 X,于是叫做 XSS。

最简单的就是当我们提交一个查询后弹出一个alert页面,却无论如何都关不掉,这就是发生了XSS跨站脚本攻击。

XSS产生原因:

XSS产生的原因是过于信任客户端的数据,没有做好过滤或者转义等工作。如果客户端上传的数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了,这样就造成了XSS攻击。

XSS分类:

  • 存储型:攻击者将恶意代码存储到了数据库中,在响应浏览器请求的时候返回恶意代码,并且执行。这种攻击常见于带有用户保存数据的网站功能;
  • 反射型:将恶意代码放在URL中,将参数提交到服务器。服务器解析后响应,在响应结果中存在XSS代码,最终通过浏览器解析执行;
  • DOM型:取出和执行恶意代码由浏览器端完成,属于前端 JavaScript的安全漏洞。

XSS防御:

  • 对重要的 cookie设置 httpOnly, 防止客户端通过document.cookie读取 cookie;
  • 对输入内容的特定字符进行编码,前端后端都可以对传入的内容进行过滤,去掉带javascript等字段的输入

(2)CSRF跨站请求伪造:

答:CSRF( Cross-site request forgery)跨站请求伪造,也是一种常见的安全漏洞。XSS相当于是控制了站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。

CSRF举例:

用户登录受信任网站A,并在本地生成登录态Cookie。(如果用户没有登录网站A,那么网站B在获取A网站的信息并且去请求网站A的接口时,会提示登录)在不登出A的情况下,访问恶意网站B,那么网站B得到了网站A的所有信息,然后B网站去请求A网站的接口,伪装成A网站的正常请求为所欲为。

下边以示意图来说明CSRF整个流程

图片说明

注意:

CSRF中恶意网站仅仅是伪装成了正常用户,但是其并不可以直接获取到正常用户的登录态cookie等信息。如果不做防御,被攻击网站服务器是无法区分是否是冒用用户,因为当前请求确实带着登录凭证等信息。

CSRF防御:

  • Referer 头验证:在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。不靠谱,Referer可以被改变;
  • Token验证:服务器发送给客户端一个Token,客户端提交的表单中(或者URL上)带着这个Token。如果这个Token 不合法,那么服务器拒绝这个请求。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java开发岗高频面试题全解析 文章被收录于专栏

<p> Java开发岗高频面试题全解析,专刊正文共计31节,已经全部更新完毕。专刊分9个模块来对Java岗位面试中的知识点进行解析,包括通用面试技能,Java基础,Java进阶,网络协议,常见框架以及算法,设计模式等。专刊串点成面的解析每个面试题背后的技术原理,由浅入深,循序渐进,力争让大家掌握面试题目的背后的技术原理,摒弃背题模式的陋习。 专刊详细信息,请查阅专刊大纲和开篇词的介绍。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p>

全部评论
''' DNS解析:将域名解析成对应的服务器IP地址。 TCP连接:拿到域名对应的IP地址之后,浏览器会以一个随机端口(1024<端口<65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。 发送HTTP请求:建立了TCP连接之后,发起一个http请求。一个典型的 http request header 一般需要包括请求的方法,例如 GET 或者 POST 等,不常用的还有 PUT 和 DELETE 、HEAD、OPTION以及 TRACE 方法,一般的浏览器只能发起 GET 或者 POST 请求。 客户端向服务器发起http请求的时候,会有一些请求信息,请求信息包含三个部分: 请求方法URI协议/版本 请求头(Request Header) 请求正文: 服务器处理请求并返回HTTP报文:后端从在固定的端口接收到TCP报文开始,它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。 HTTP报文;就是返回一个HTPP响应。 HTTP响应与HTTP请求相似,HTTP响应也由3个部分构成,分别是: 状态行 响应头(Response Header) 空行 响应正文 浏览器解析渲染页面:WebKit渲染的过程:构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树 连接结束:现在的页面为了优化请求的耗时,默认都会开启持久连接(keep-alive),那么一个TCP连接确切关闭的时机,是这个tab标签页关闭的时候。这个关闭的过程就是著名的四次挥手。关闭是一个全双工的过程,发包的顺序的不一定的。 '''
3 回复 分享
发布于 2020-05-09 10:30
'or 1=1 #
1 回复 分享
发布于 2021-03-26 13:12
打卡
点赞 回复 分享
发布于 2023-09-09 19:56 河南
汤姆来打卡啦
点赞 回复 分享
发布于 2021-05-31 10:25
<script>alert('xss')</script>
点赞 回复 分享
发布于 2021-03-26 13:12
打卡
点赞 回复 分享
发布于 2020-12-08 19:02
打卡,一刷
点赞 回复 分享
发布于 2020-09-26 17:28
打卡
点赞 回复 分享
发布于 2020-04-10 11:42
打卡
点赞 回复 分享
发布于 2020-01-08 21:59

相关推荐

码农索隆:卡学历都不行了,开始卡颜值了
点赞 评论 收藏
分享
06-12 16:23
已编辑
小米_软件开发(准入职员工)
点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务