公司:xxx
职位:web前端工程师
看到面试职位,就有点奇怪,本来我投递的是PHP sever工程师的。
去面试了,果然悻然二回,下面记录下面试的过程。
面试的是个小年轻,估计也就90后,一下让我有直接走的冲动。
1、自我项目介绍。
2、mysql表设计:
产品表,用户表,设计两表关系
博客多级评论,如何查到某评论下的所有评论?
第一个问题,直接设计关系表,没什么可说的。
第二个问题,评论表里,我设计了层级字段,父级ID字段。但是要查出 某评论下的所有评论,还是需要多次查询,没有真正解决问题。
3、session如何存储
这个问题一下有点蒙,竟然说是存储在环境变量中。
其实我们平时的项目是用memcache存储的,竟然当时没想起来。
其他存储方式还有 数据库存储和共享存储。
4、CSRF攻击,如何防止
当时只想到了随机串
攻击方式:受害者打开网站A,登陆网站A,网站A保存一些cookies在本地(没有关闭浏览器),受害者又打开网站B,网站B保存一些恶意cookies,并向网站A发送受害者的请求(网站B利用受害者攻击网站A)。
受害者打开网站B,网站B诱使受害者进行网站A的操作。(假官网盗取用户资料)
解决方案:验证 HTTP Referer 字段,给用户分配token。
服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。
XSS攻击------相对复杂的安全性问题
攻击方式:基于DOM的XSS即通过浏览器来直接运行js脚本,无须提交服务器,从客户端的代码引起的。
如:其实就是发送一个合法的地址加自己的脚本,比如:www.xxx.com/search?wd=<script>...</script>
受害者点击的是www.xxx.com/search?wd=<script>...</script>链接,然后受害者的浏览网页就加入这个恶意代码。
存储XSS攻击即通过输入框提交js脚本或者上传文件到服务器,从网站的数据库引起的攻击。
反射XSS攻击即通过url提交js脚本到服务器,从受害人的请求发起引起的攻击。
解决方案:后端输出页面的时候需要进行转换html实体。
如:<script>
转义成 <script>
过滤用户输入。
DoS攻击------常见的具有破坏性的安全性问题(如果是分布式攻击的话就是DDos攻击)
攻击方式:Ping Flood攻击即利用ping命令不停的发送的数据包到服务器。
SYN Flood攻击即利用tcp协议原理,伪造受害者的ip地址,一直保持与服务器的连接,导致受害者连接服务器的时候拒绝服务。
解决方案:设置路由器与交换机的安全配置,即设置防火墙。(涉及到硬件问题我就不多说了,只是提醒一下)
5、跨域问题如何解决
只想到了jsonp方式,我也只知道这种方式。
JSONP包含两部分:回调函数和数据。
回调函数是当响应到来时要放在当前页面被调用的函数。
数据就是传入回调函数中的json数据,也就是回调函数的参数了。
function handleResponse(response){ console.log('The responsed data is: '+response.data); } var script = document.createElement('script'); script.src = 'http://www.baidu.com/json/?callback=handleResponse'; document.body.insertBefore(script, document.body.firstChild); /*handleResonse({"data": "zhe"})*/ //原理如下: //当我们通过script标签请求时 //后台就会根据相应的参数(json,handleResponse) //来生成相应的json数据(handleResponse({"data": "zhe"})) //最后这个返回的json数据(代码)就会被放在当前js文件中被执行 //至此跨域通信完成
postMessage(HTML5中的XMLHttpRequest Level 2中的API)
location.hash + iframe
document.domain + iframe
window.name + iframe
基本归结为三类方法:jsonp,iframe,html5的postMessage
6、项目中遇到的难点:
介绍了券到期提醒方案
7、多进程读文件
我说用redis的setnx,估计他是想让我回答php自带的flock
8、url白名单如何过滤,具体不知道到他什么意思
9、isset和empty的区别,估计他也没什么耐心了,随便问问了。
总体来说,问题便前端,跟我不太对路。