web前端面试题(安全方向)

1.请简述XSS的原理

跨站脚本攻击,恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。

类型:

(1)来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句,如:dvbbs的showerror.asp存在的跨站漏洞。

(2)来自外部的攻击,主要指自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。

2.请简述XSS的防御方法

两种思路: 不要让其变成程序;这个数据变成程序的话不让它执行

(1)浏览器内置了对反射型XSS的防御,当它检测到有反射型xss的时候会进行拦截

(2)对数据进行适当转义,包括在正文中的转义,属性中的转义,脚本中的转义,转义的字符包括大于号、小于号、单双引号以及and号等等

(3)针对不能对html标签全部过滤或转义的情况,比如富文本,因为富文本的样式是靠html标签产生的,这种情况只能使用白名单进行过滤,就是把这段代码解析成具体的html树, 对树进行分析哪些可以保留,最后变成html字符串

(4)使用csp指定哪些内容可以执行,哪些不能执行

3.XSS的防御需要注意的点

转义的时候注意适用场景和范围

如果是在script标签,需要转义大于号小于号,在属性中转义引号,富文本中只能通过白名单方式,也就是场景和对应方法

4.SQL注入的原理和造成的危害

SQL Injection:跟XSS原理相似,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

危害:

(1)sql语句的语义改变

(2)页面逻辑出现异常

(3)泄露数据,拖库等

解决方案:

(1)通过正则表达式验证用户输入,比如是否包含对单引号进行转换等字符,是否有SQL保留字

(2)通过参数化存储过程进行数据查询,LINQ To SQL

(3)参数化SQL语句

5.Node.js如何防止SQL注入

通过转义,对可能有风险的参数进行转义

通过ORM系统数据模型来做

通过数据库提供的参数化查询能力(表达查询意图,条件值是什么)

6.什么是cookie,作用是什么

cookie是浏览器提供的一种机制,因为cookie是存储在客户端浏览器中的,可以由JavaScript对其进行控制(设置、读取、删除)

cookie的作用:是为了实现客户端与服务器之间状态的保持

7.cookie有哪些特性

(1)cookie可以实现跨页面全局变量

(2)cookie可以跨越同域名下的多个网页,但不能跨越多个域名使用

(3)同一个网站中所有页面共享一套cookie

(4)可以设置有效期限

(5)存储空间4-10KB左右

8.cookie,localStorage,sessionStorage三者的区别

数据上的生命周期的不同

cookie一般由服务器生成,可设置失效时间,如果在浏览器端生成cookie,默认是关闭后失效。

localStorage除非被永久清除,否则永久保存。

sessionStorage仅在当前会话会有效,关闭页面或浏览器后被清除

存放数据的大小不同

cookie一般为4kb

localStorage和sessionStorage一般为5mb

与服务器端通信不同

cookie每次都会携带HTTP头中,如果使用cookie保存过多数据会带来性能问题

localStorage和sessionStorage仅在客户端(即浏览器)中保存,不参与和服务器的通信

易用性

cookie需要程序员自己来封装,原生的cookie接口不够友好

localStorage和sessionStorage原生接口可以接受,可以封装,对Object和Array有更好的支持

9.cookie和session的关系

(1)cookie数据存放在客户的浏览器上,session数据放在服务器上

(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,如果主要考虑到安全应当使用session

(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用cookie

(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的cookie不能超过3K

(5)所以将登陆信息等重要信息存放在session;其他信息如果需要保留,可以放在cookie中。

10.如何删除cookie的值

将 Cookie 的到期日期设置为过去的某一时间

11.CSRF的原理和特征

CSRF,跨站请求伪造,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。

XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

浏览器在访问服务器的时候会带上cookie,而第三方网站通过图片或表单提交方式也会带上cookie,带上的过程中表示我知道用户身份,利用身份进行操作,而这个过程中用户不知情

特征:

(1)依靠用户标识危害网站

(2)利用网站对用户标识的信任

(3)欺骗用户的浏览器发送HTTP请求给目标站点

(4)另外可以通过IMG标签会触发一个GET请求,可以利用它来实现CSRF攻击。

12.CSRF如何防御

(1)不让第三方请求带cookie,主要通过same-site这个属性,但是会有兼容性问题

(2)增加用户的感知,比如验证码,不让静默操作

(3)增加token,第三方访问时没法读取cookie

(4)判断refer,来源是否来自第三方网站

13.部署HTTPS的步骤

(1)确保全站都可以部署到https,因为部署一部分的话意义有限,最麻烦的地方是资源引用,涉及到资源改造

(2)找CA生成证书

(3)部署到服务器

14.HTTPS如何保证数据不被窃听和不被中间人攻击

通过数据加密在客户端和服务端通讯之前协商一个加密协议,通过加密协议传输数据,第三方可以窃听,但是不知道加密前的原始数据是什么

中间人就是在客户端和服务端之间充当加密和解密角色,通过证书机制,服务器证书需要CA签发,浏览器验证是否可信CA签发

15.文件上传的漏洞原理和防范

大部分的网站和应用系统都有上传功能,一些文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过Web访问的目录上传任意PHP文件,并能够将这些文件传递给PHP解释器,就可以在远程服务器上执行任意PHP脚本。

当系统存在文件上传漏洞时攻击者可以将病毒,木马,WebShell,其他恶意脚本或者是包含了脚本的图片上传到服务器,这些文件将对攻击者后续攻击提供便利。根据具体漏洞的差异,此处上传的脚本可以是正常后缀的PHP,ASP以及JSP脚本,也可以是篡改后缀后的这几类脚本。

上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接自动运行;

上传文件是WebShell时,攻击者可通过这些网页后门执行命令并控制服务器;

上传文件是其他恶意脚本时,攻击者可直接执行脚本进行攻击;

上传文件是恶意图片时,图片中可能包含了脚本,加载或者点击这些图片时脚本会悄无声息的执行;

上传文件是伪装成正常后缀的恶意脚本时,攻击者可借助本地文件包含漏洞(Local File Include)执行该文件。如将bad.php文件改名为bad.doc上传到服务器,再通过PHP的include,include_once,require,require_once等函数包含执行。

防范:

判断文件后缀

判断文件类型

判断文件头

设置权限, 让上传的文件没有可执行权限

你可能感兴趣的:(web前端面试题(安全方向))