「2022」打算跳槽涨薪,必问面试题及答案——WEB 安全
Hi,我是前端人,今日与君共勉!废话不多说,直接上干货!
1、你对 WEB 安全的理解?
互联网发展迅速,现在的 web 不再是以前的简单网页,除了常见的电商购物平台、手机转账、银行系统之外,物联网技术的发展,不仅让智能家居走进了生活,也促进了医疗、物流等行业的发展,安全问题逐渐也成为大家比较关心的问题。
作为一个前端程序员最关心的也就是 web 安全喽,较为常见且危害较大的有 XSS跨站脚本攻击、SQL 注入、CSFR 跨站请求伪造等攻击方式。我们需要更好的理解它们的恶意攻击原理,才能更好的防御攻击。
2、XSS 跨站脚本攻击
XSS 是 Cross Site Scripting 的缩写,为了与 CSS 做区分,所以叫做 XSS 。
XSS 攻击主要是 web 页面被植入了恶意的 script 代码,当用户访问页面的时候,嵌入的恶意代码自动执行,从而达到攻击的效果。XSS 攻击类型可分为三种:
- 反射型 XSS 攻击
- 存储型 XSS 攻击
- 文档型 XSS 攻击
反射型 XSS 是发出网络请求时,恶意攻击代码出现在 url 中,作为输入内容提交给服务器,服务器再返回给浏览器,浏览器执行 XSS 代码,这个过程像是一次反射,所以叫做反射型 XSS 攻击。
http://www.xxx.com?q=<script>alert("恶意脚本")script>
或
http://www.xxx.com?n=<img sec="1 onerror=alert('恶意代码')">
存储型 XSS 是提交的 XSS 代码存储到服务器的数据库、内存或文件系统内,下次请求目标页面时不再提交 XSS 代码。常见于用户输入的地方。
文档型 XSS 不会经过服务器,作为中间人的角色,在数据传输过程中劫持到网络数据包,然后修改里面的 html 文档。
XSS 危害较多,常见的是盗用账号、盗取商业价值信息等。所以我们就需要做一定的防御措施来保障用户的权益,针对以上三种攻击方式,对应的也有三种防御措施,分别为:
- 客户端和服务端进行转义编码
<script>alert('恶意代码')script>
转义编码后编辑器又会给你重新处理,不知道的同学可以自己试试!
- 过滤掉危险节点,如 script、style、link、iframe 。
- 利用 CSP
Content Security Policy 内容安全策略,可以规定当前网页可以加载的资源的白名单,从而减少网页受到 XSS 攻击的风险。
3、CSRF 怎么防御知道吗?
CSFR 是 cross site request forgery ,中文名叫跨站请求伪造。也被称为:one click attack/session riding,缩写为:CSRF / XSRF。
CSRF 主要是攻击者盗用用户的身份,以用户的名义进行恶意操作,容易造成个人隐私泄露以及财产安全问题,所以 CSRF 的防御措施不能少,可以从服务端和客户端两方面着手,它的防御方式有以下几种:
- 检查 http 头部的 referer 信息
- 使用一次性令牌
- 关键操作使用 POST 请求
- 使用验证码
具体的防御措施内容为:
1>、检查 http 头部的 referer 信息
referer 包含在 http 请求头内,表示请求接口的页面来源,服务端通过检查 referer 信息,发现来源于外域时拦截请求,阻止不明请求,一定程度上可以减少攻击。
2>、使用一次性令牌
使用一次性令牌做身份标识,黑客是无法通过跨域拿到一次性令牌的,所以服务端可以通过判断是否携带一次性令牌,可以排除一部分非法操作者。
3>、 关键操作使用 POST 请求
敏感操作使用 POST 请求,主要是为了防止用户敏感信息出现在 url 中,容易泄露重要信息。
4>、使用验证码
CSRF 攻击基本都是出现在用户不知道的情况下,在用户无感的情况下偷偷发送网络请求,如果使用验证码,需要每次进行重要操作时进行验证,从而简单有效的防御了 CSRF 攻击。
4、SQL注入是啥?
所谓的 SQL 注入就是把 SQL 语句命令插入到 web 表单提交或页面请求的查询字符串,最终达到服务器执行恶意 SQL 命令。它是一种常见的 WEB 安全漏洞,攻击者会利用这个漏洞,可以访问或修改数据,利用潜在的数据库漏洞进行攻击。
SQL 注入可以分为以下几例:
- 数字型注入
- 字符型注入
- 其他类型
SQL 注入的防范措施:
- 添加正则验证和过滤。凡是用户输入的地方,都不要信任用户的输入,需要对用户输入的内容进行正则表达式验证。
- 敏感字段要加密。机密敏感的信息不能直接存放,需要加密或 hash 掉敏感的信息。
- 不要使用管理员权限连接数据库。为每个应用使用单独的权限进行控制有限的数据库连接,永远不要使用管理员权限连接数据库。
- 不能动态拼接SQL语句。可以使用参数化的 SQL 或者直接使用存储过程进行数据查询存取,但是不要动态拼接。
5、DDOS 攻击
DDOS 是 Distributed Denial of Service 的缩写,翻译为中文是分布式拒绝服务。DDOS 攻击指的是借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动 DDOS 攻击,从而成倍的提高拒绝服务攻击的威力。该攻击方式主要利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务。
DDOS 攻击通过大量合法的请求占用大量资源,以达到瘫痪网络的目的,具体的表现形式有几下几种:
- 通过使网络过载来干扰甚至阻断正常的网络通讯;
- 通过向服务器提交大量请求,使服务器超负荷;
- 阻断某一用户访问服务器;
- 阻断某服务与特定系统或个人的通讯。
6、DNS 劫持
DNS 是将网络域名对应到真实计算机能够识别的 IP 地址,以便进一步通信。DNS劫持就是当用户通过某一个域名访问站点时,被篡改的 DNS 服务器返回的是一个钓鱼网站的 IP,用户被劫持到钓鱼网站,进而泄露隐私。
7、HTTP劫持
HTTP劫持是当用户访问某个网站时,会经过运营商,运营商和黑厂勾结就能够截获请求返回的内容,并且篡改返回的内容之后再返回给用户。一般网站被劫持之后就会插入一些广告,严重的可能直接修改成钓鱼网站窃取用户信息。
防御措施:
通信过程没有对对方身份进行校验以及对数据完整性进行校验,所以防止 HTTP 劫持的方法只有将内容加密,让劫持者无法破解篡改,这样就可以防止 HTTP 劫持了。