这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情。
大家好,我叫小杜杜,作为一个优秀的前端,我们需要知道大量的知识,其中便包括网络安全,关于这块内容建议大家熟知就好,这块内容可能在平常的开发中用的不多,但面试中还是会问的,当做一个了解模块就好~
信息安全
信息安全三要素(CIA)
- C:机密性, Confidentiality,确保数据没有未经授权的泄漏,不被未经授权的个人、组织和计算机程序使用
- I:完整性,Integrity,确保数据不能以未经授权或未检测的方式被修改
- A:可用性,Availability,确保信息系统在授权个人,组织或计算机程序需要访问时能够正常提供信息
安全模型(PPDR)
-
P:策略(Policy),如监控周期、恢复机制、访问策略等
-
P:防护(Protection),如防护技术、加密、身份认证等
-
D:检测(Detection),如检测监控、发现威胁、发现漏洞等
-
R:响应(Response),如及时响应、遏制、恢复等
-
Pt:防御时间:指黑客从开始入侵到入侵系统的时间(系统在黑客攻击下的存活时间),高水平入侵和安全薄弱系统使Pt缩短
-
Dt:检测时间:黑客发动入侵到系统能够检测到入侵行为所花费的时间。适当的检测措施可以缩短Dt
-
Rt:响应时间:从检测到系统漏洞或检控到非法攻击到做出有效响应(如切换、报警、跟踪等)的时间
-
Et:系统暴露的时间:指 Et = Dt + Rt - Pt
固:系统的检测时间和响应时间越长,或系统的保护时间越短,则系统暴露时间越长,就越不安全
文件上传漏斗
文件上传是指:文件上传指用户提交文档到Web服务器平台,是Web系统中最常见的功能之一,文件上传功能本身没有问题,问题是文件上传到哪,上传之后服务器如何处理、解析文件。
文件上传漏洞:
利用当前系统已有的上传功能,比如文件上传,图像上传等的设计缺陷来上传人意文件或者webshell
产生的原因:
- Web服务器的文件上传功能在程序设计上有逻辑缺陷
- Web服务器无法识别区分上传的文件内容、格式
- Web服务器对文件上传路径或位置控制不严格
- 服务器对所上传文件的读、写、执行、继承权限设计不严格
防御方法:
- 对上传文件在服务器上存储时进行重命名
- 检查上传文件的类型和大小
- 禁止上传危险的文件类型,如jsp、jar、war等
- 建议采用白名单方式,只允许上传某些文件:jpg、png、gif等
- 上传文件要保存的文件名和目录名由系统根据时间生成名,不允许用户自定义
- 上传目录不允许执行权限
XSS
XSS:Cross Site Scripting,即跨站脚本攻击,是一种常见于 Web 应用中的计算机安全漏洞。
恶意攻击者常在 Web 页面里嵌入恶意的客户端脚本,当用户浏览此网页时,脚本就会在用户的浏览器上执行,进而达到攻击者的目的。
比如获取用户的 Cookie
、导航到恶意网站
、携带木马
等。
攻击手段
-
绕过 XSS-Filter,利用<>标签注入
Html/JavaScript
代码; -
利用
HTML
标签的属性值进行 xss 攻击。(如:<img src="javascript:alert('xss')" />
;) -
空格
、回车
和Tab
。如果XSS Filter
仅仅将敏感的输入字符列入黑名单,比如JavaScript
,用户可以通过空格、回车和 Tab 键来绕过过滤(如:<img src="javas cript:alert(/xss/)" />
) -
利用事件来执行跨站脚本。例如:
<img src="#" onerror="alert(1)" />
,当 src 错误的视乎就会执行 onerror 事件; -
利用 CSS 跨站。(如:
body {backgrund-image: url("javascript:alert('xss')" )};
) -
利用字符编码,透过这种技巧,不仅能让 XSS 代码绕过服务端的过滤,还能更好地隐藏 Shellcode;(JS 支持 unicode、eacapes、十六进制、十进制等编码形式)
-
拆分跨站法,将 XSS 攻击的代码拆分开来,适用于应用程序没有过滤 XSS 关键字符(如<、>)却对输入字符长度有限制的情况下;
-
DOM 型的 XSS 主要是由客户端的脚本通过 DOM 动态地输出数据到页面上,它不依赖于提交数据到服务器,而是从客户端获得 DOM 中的数据在本地执行。容易导致 DOM 型的 XSS 的输入源包括:
Document.URL
、Location(.pathname|.href|.search|.hash)
、Document.referrer
、Window.name
、Document.cookie
、localStorage/globalStorage
;
防御措施
原则不相信客户输入的数据
注意: 攻击代码不一定在 <script></script>
中
- 使用
XSS Filter
输入过滤,对用户提交的数据进行有效性验证,仅接受指定长度范围内并符合我们期望格式的的内容提交,阻止或者忽略除此外的其他任何数据。比如:电话号码必须是数字和中划线组成,而且要设定长度上限。过滤一些些常见的敏感字符,例如:< > ' " & # \ javascript expression "onclick=" "onfocus"
过滤或移除特殊的 Html 标签。 例如: <script>,<iframe>,<for <, > for >, " for
;过滤 JavaScript 事件的标签,例如 onclick=
,onfocus
等等。
输出编码,当需要将一个字符串输出到 Web 网页时,同时又不确定这个字符串中是否包括 XSS 特殊字符(如 < > &' "
等),为了确保输出内容的完整性和正确性,可以使用编码 HTMLEncode
进行处理。
DOM
型的XSS
攻击防御
把变量输出到页面时要做好相关的编码转义工作,如要输出到 <script>
中,可以进行 JS 编码;要输出到 HTML 内容或属性,则进行 HTML
编码处理。根据不同的语境采用不同的编码处理方式。
HttpOnly Cookie
将重要的 cookie
标记为 http only
, 这样的话当浏览器向 Web 服务器发起请求的时就会带上 cookie 字段,但是在脚本中却不能访问这个 cookie
,这样就避免了 XSS 攻击利用 JavaScript
的 document.cookie
获取 cookie
CSRF
CSRF:Cross-site request forgery,跨站请求伪造,也被称为“One Click Attack”或者 Session Riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用。
CSRF 攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。
如用户当前已经登录了邮箱,或 bbs,同时用户又在使用另外一个,已经被你控制的站点,好比是钓鱼网站。
这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个 js 的点击事件,构造一个 bbs 发帖的请求,去往你的 bbs 发帖,由于当前你的浏览器状态已经是登陆状态,所以 session 登陆 cookie 信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情。
防御措施
- 通过 referer、token 或者 验证码 来检测用户提交
- 尽量不要在页面的链接中暴露用户隐私信息
- 对于用户修改删除等操作最好都使用 post 操作
- 避免全站通用的 cookie,严格设置 cookie 的域
End
有关于安全知识的基本就已经讲完了,需要注意一点,要注意信息泄漏~