前端面试(vue优化、移动端兼容问题、前端安全问题)

358 阅读3分钟

前端面试

1. vue优化

代码webpack打包
减少直接dom操作webpack-bundle-analyzer分析打包文件
v-for 遍历避免同时使用 v-ifurl-loader转换小图为base64
图片懒加载image-webpack-loader压缩大图
路由懒加载splitChunks提取文件
第三方库按需引入terser-webpack-plugin、optimize-css-assets-webpack-plugin压缩js、css
节流、防抖thread-loader开启 Loader 多进程转换
虚拟列表AutoDllPlugin提前打包公共代码

2. 移动端浏览器兼容

问题解决方案
css样式清除默认样式,如Normalize.css;添加前缀
ios下输入英文首字母默认大写<input autocapitalize="off" autocorrect="off" />
移动端字体小于12px使用四周边框或者背景色块,部分安卓文字偏上可以使用整体放大1倍(width、height、font-size等等),再使用transform缩放
在Android上placeholder文字设置行高会偏上input有placeholder情况下不要设置行高
overflow: scroll或auto;在iOS上滑动卡顿的问题-webkit-overflow-scrolling: touch;
ios日期时间转换date.replace(/-/g, '/').xxx
点击<button><input>有灰色透明背景-webkit-tap-highlight-color:rgba(0,0,0,0)
flex不兼容,加前缀也不行display:-webkit-box;display:box;display:-webkit-flex;display:flex;
浏览器部分兼容<meta charset="utf-8"> <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport"> <meta content="yes" name="apple-mobile-web-app-capable"> <meta content="black" name="apple-mobile-web-app-status-bar-style"> <meta content="telephone=no" name="format-detection"> <meta content="email=no" name="format-detection">
transition闪屏-webkit-transform-style:preserve-3d;-webkit-backface-visiblity:hidden;

3. 前端安全

问题种类原理攻击方式解决方案
XSS:跨站脚本攻击攻击者往 web 页面里插入恶意的 HTML 代码(Javascript、css、html 标签等),当用户浏览该页面时,嵌入其中的 HTML 代码会被执行,从而达到恶意攻击用户的目的。如盗取用户 cookie 执行一系列操作,破坏页面结构、重定向到其他网站等1、DOM Based XSS:基于网页 DOM 结构的攻击;2、input 标签 value 属性赋值;3、利用 a 标签的 href 属性的赋值;4、image 标签 src 属性,onload、onerror、onclick 事件中注入恶意代码;5、Stored XSS:存储式XSS漏洞1、 web 页面中可由用户输入的地方,如果对输入的数据转义、过滤处理;2、 后台输出页面的时候,也需要对输出内容进行转义、过滤处理(因为攻击者可能通过其他方式把恶意脚本写入数据库);3、 前端对 html 标签属性、css 属性赋值的地方进行校验
CSRF:跨站点请求伪造攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。受害者登录A网站,并且保留了登录凭证(Cookie)->攻击者引诱受害者访问B网站->B网站向A网站发送了一个请求,浏览器请求头中会默认携带A网站的Cookie1、验证Origin Header&Referer Header;2、添加并验证 token;3、添加自定义http请求头;4、cookie设置SameSite禁止第三方使用;5、设置X-FRAME-OPTIONS控制页面是否可被嵌入iframe;6、使用https;7、使用sandbox禁止被使用的iframe对当前网站某些操作;8、使用POST请求