准备前端面试的时候,你绝对不会忘记准备html、css、js基础的知识,并且性能也在你的考虑范围之内,框架方面,angular/react/vue你也信心满满,然而你是否忽略了安全问题,而感觉被面试官套路了呢?
下面我们就来说一说前端面试中常见的安全问题
一、SQL注入攻击
什么是sql注入:
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句
这一段是度娘的,网上有更深的解析文章,相信你能找到更准确的表述去回答面试官的问题
解法:
- 检查变量数据类型和格式
- 过滤特殊符号
基本关键词: and、or、order
增的关键词: insert、into
删的关键词: delete
改的关键词: replace、update
查的关键词: union、select、
文件处理的关键词: load_file、outfile
引号使用 反斜杠转义
- 绑定变量使用预编译语句(例如使用query)(最佳方式)
二、跨站脚本攻击 - XSS
什么是XSS:
XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。
解法:
- 不要在不允许位置插入不可信数据
- html encode
字符 | 编码字符 |
---|---|
less-than character (<) | < |
greater-than character (>) | > |
ampersand character (&) | & |
double-quote character (“) | “ |
space character( ) | |
Any ASCII code character whose code is greater-than or equal to 0x80 | &# |
三、跨站伪造请求攻击 - CSRF
什么是CSRF:
CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作,有很大的危害性。
解法:
- 验证 HTTP Referer 字段(低版本浏览器可能会被篡改,用户也可以通过浏览器设置不发送此字段)
- token验证(通过native发请求,根据公钥生成token)
四、dns劫持
什么是dns劫持:
DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。
dns劫持跟dns污染有什么区别?
dns劫持是直接劫持了dns服务器,进行恶意的解析;而dns污染是伪装了dns服务器,进行dns解析,例如,dns服务器在国外,而在经过国内的某一个网络节点的时候,该网络节点伪装成dns服务器返回了恶意的解析结果
解法:
- 使用安全可靠的DNS服务器管理自己的域名,并且注意跟进DNS的相关漏洞信息,更新最新补丁,加固服务器;
- 保护自己的重要机密信息安全,避免域名管理权限被窃取;
- 提高服务器安全级别,更新系统及第三方软件漏洞,避免遭受攻击;
- 如果允许的话,用ip地址访问服务器(当然啦,一般情况下是不行的)
其它可了解的
- 分布式拒绝服务攻击 - DDOS
- 文件上传漏洞攻击