1、说说你对http的理解
1)首先用户端与服务器需要建立连接。
2)建立连接后,用户端发送一个请求给服务器
3)服务器接到请求后,给予相应的响应信息,
4)用户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后用户端与服务器断开连接。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议
2、说说HTTPS和HTTP的区别
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
HTTP的请求:
HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
响应:
HTTP之状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态码:
200 OK //客户端请求成功
301 Moved Permanently //永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found // 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI 303 See Other //查看其它地址。与301类似。使用GET和POST请求查看 304 Not Modified //未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 305 Use Proxy //使用代理。所请求的资源必须通过代理访问
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
一个页面从url敲如地址到页面显示的全过程
1、浏览器地址栏输入url
2、浏览器会先查看浏览器缓存--系统缓存--路由缓存,如有存在缓存,就直接显示。如果没有,接着第三步
3、域名解析(DNS)获取相应的ip
4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手
5、握手成功,浏览器向服务器发送http请求,请求数据包
6、服务器请求数据,将数据返回到浏览器
7、浏览器接收响应,读取页面内容,解析html源码,生成DOm树
8、解析css样式、浏览器渲染,js交互
9、请求页面中需要的js脚本和图片或者样式表
前端的安全CSRF,XSS,sql注入
CSRF
CSRF概念:CSRF跨站请求伪造(Cross—Site Request Forgery),存在巨大的危害性,你可以这样来理解: 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
CSRF攻击攻击原理及过程如下:
用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
防御CSRF攻击:
目前防御 CSRF 攻击主要有2种策略:验证 HTTP 请求的Referer 字段;在请求地址中添加 token 并验证
XSS
XSS, 即为(Cross Site Scripting), 中文名为跨站脚本, 是发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预期内XSS(Cross Site Scripting),跨站脚本攻击,是一种允许攻击者在另外一个用户的浏览器中执行恶意代码脚本的脚本注入式攻击。本来缩小应该是CSS,但为了和层叠样式(Cascading Style Sheet,CSS)有所区分,故称XSS执行的JS代码时,就发生了XSS攻击。
1、持续型XSS攻击:恶意脚本来源于网站的数据库
1、攻击者通过评论表单提交将<script\>alert(‘aaa’)</script\>提交到网站
2、网站后端对提交的评论数据不做任何操作,直接存储到数据库中
3、其他用户访问正常访问网站,并且需要请求网站的评论数据
4、网站后端会从数据库中取出数据,直接返回给用户
5、用户得到页面后,直接运行攻击者提交的代码<script>alert(‘aaa’)</script>`,所有用户都会在网页中弹出aaa的弹窗
2、反射型XSS攻击:恶意脚本来源于受害者的请求
在一个反射型XSS攻击中,恶意文本属于受害者发送给网站的请求中的一部分。随后网站又把恶意文本包含进用于响应用户的返回页面中,发还给用户。
1、用户误点开了带攻击的url :http://xxx?keyword=<script\>alert('aaa')</script\>
2、网站给受害者的返回中包含了来自URL的的恶意文本
3、用户的浏览器收到文本后执行页面,会在网页中弹窗aaa
3、基于DOM的XSS攻击
基于DOM的XSS攻击是反射型攻击的变种。服务器返回的页面是正常的,只是我们在页面执行js的过程中,会把攻击代码植入到页面中
1、用户误点开了带攻击的url :http://xxx?name=<script\>alert('aaa')</script\>
2、网站给受害者的返回中正常的网页
3、用户的浏览器收到文本后执行页面合法脚本,这时候页面恶意脚本会被执行,会在网页中弹窗aaa
如何防止攻击
XSS攻击其实就是代码的注入。用户的输入被编译成恶意的程序代码。所以,为了防范这一类代码的注入,需要确保用户输入的安全性。对于攻击验证,我们可以采用以下两种措施:
1、编码,就是转义用户的输入,把用户的输入解读为数据而不是代码
2、校验,对用户的输入及请求都进行过滤检查,如对特殊字符进行过滤,设置输入域的匹配规则等。
SQL注入
SQL注入就是一种通过操作输入来修改后台SQL语句达到代码执行进行攻击目的的技术。
cookie、sessionStorage、localStorage的区别
1、cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递,而 sessionStorage和localStorage不会自动把数据发送给服务器,仅在本地保存。
2、存储大小限制也不同,cookie数据不能超过4K,同时因为每次http请求都会携带cookie、所以cookie 只适合保存很小的数据。sessionStorage和localStorage虽然也有存储大小的限制,但比 cookie大得多,可以达到5M或更大
3、数据有效期不同,sessionStorage仅仅在当前浏览器窗口关闭之前有效;localStorage始终有效,窗口或 者浏览器关闭之后也一直保存,因此作用持久数据;cookie,只在设置cookie过期时间之前有效,即使窗口关闭或者浏览器关闭。
Ajax 是什么,ajax请求方式有几种
是异步JavaScript和XML技术, 可以在不必刷新页面的情况下发送以及接收各种格式的信息;一种创建交互 式网页应用的网页开发技术
跨域
1、jsonp跨域(优点:简单方便,缺点:只能使用get请求,不支持post请求)11
2、nginx的反向代理(少用) apach tomact
3、window.name(少用)
4、axios反向代理,
5、cors(跨域资源共享)修改服务器端修改包的头部信息,
6、iframe跨子域(不常用)
VUE项目中怎么跨域
使用http-proxy-middleware 代理解决(项目使用vue-cli脚手架搭建)
例如请求的url:“http://aa.com/demo.json“
1、打开config/index.js,在proxyTable中添写如下代码:
proxyTable: {
'/api': {//使用"/api"来代替"http://aa.com"
target:'http://aa.com',//源地址
changeOrigin:true,//改变源
secure:false// 是否使用https
pathRewrite: {
'^/api':'/api'//路径重写
}
}
}
2、使用axios请求数据时直接使用“/api”
getData() {
axios.get('/api/demo.json',function(res) {
console.log(res)
})
以上配置只是在开发环境(dev)中解决跨域。要解决生产环境的跨域问题,则在config/dev.env.js和config/prod.env.js里也就是开发/生产环境下分别配置一下请求的地址API_HOST,开发环境中我们用上面配置的代理地址api,生产环境下用正常的接口地址
module.exports=merge(prodEnv, {
NODE_ENV:'"development"',
API_HOST:"/api/"
})
'use strict'
module.exports={
NODE_ENV:'"production"',
API_HOST:"http://aa.com"
}
前后端数据交互安全
加密:
hash加密:md5 sha256
对称加密: AES ,DES
非对称加密:生成一对钥匙,公钥,私钥。 公钥是由私钥生成的
无限上拉加载
下拉刷新