这是一个系列笔记,来自《Web前端黑客技术揭秘》这本书,属于进阶内容,可以进一步提高Web开发的能力。
Web安全的关键点数据和指令
SQL注入攻击
selct username,email,desc from users where id=1
攻击者提交:
union select password,1,1 from users
最终SQL查询语句:
selct username,email,desc from users where id=1 union select password,1,1 from users
组成的SQL语句合法,通过一个经典的union查询,此时注入的指令内容就会被当做合法指令执行。这样的攻击会导致users表中的password泄露。
XSS跨站脚本攻击
eval函数能够动态执行url返回的特定信息,比如eval(location.hash.substr(1))即是截取#后的callback内容,提供给eval进行动态执行。
如果攻击者对#后的url中的#后的内容进行改造,就可以截取到访问者的cookies会话信息,其中可能包含访问者的账号、密 ...
主要功能介绍:
支持微信、支付宝、浏览器多种扫码工具扫码点餐。
支持多人扫码点餐,点餐信息通过WebSocket同步。
下单无线打印小票,后厨、服务员同时收到订单信息。
微信、支付宝在线支付,自动收银。
基础知识Vue中v-bind是一个非常重要的绑定属性的指令,这里要讲解一下绑定class样式设置的方法。
12345<ul> <li v-for="(item,key) in dinner" :key="item" :class="{'red':key==0,'blue':key==1}">{{item}}</li></ul>
v-model双向绑定,多用于表单控制的交互操作。
ref用于获取DOM节点元素。
绑定事件对象:
1<button @click="eventFn($event)">事件对象< ...
开发工具准备:
根据个人喜欢选择IDE,我使用的是WebStorm,推荐使用Atom和VSCode;
安装git base和node.js;
安装vue-cli,命令npm i -g @vue/cli;
新建vue-cli项目:
方法一:通过图形界面进行安装vue ui;
方法二:通过命令行安装vue create project-name
运行项目npm run serve,端口8080。
双向绑定v-model双向绑定大多用于表单事件,通过监听使用者输入的事件来更新内容。
现阶段大部分工作在App.vue上,template与普通写法一致,js写法:
123456789export default { name: 'app', data() { return { title: 'vue.js', myname: '请输入名字' } }}
去掉空白符.trim直接 ...
开发工具准备:
根据个人喜欢选择IDE,我使用的是WebStorm,推荐使用Atom和VSCode;
安装git base和node.js;
安装vue-cli,命令npm i -g @vue/cli;
新建vue-cli项目:
方法一:通过图形界面进行安装vue ui;
方法二:通过命令行安装vue create project-name
运行项目npm run serve,端口8080。
双向绑定v-model双向绑定大多用于表单事件,通过监听使用者输入的事件来更新内容。
现阶段大部分工作在App.vue上,template与普通写法一致,js写法:
123456789export default { name: 'app', data() { return { title: 'vue.js', myname: '请输入名字' } }}
去掉空白符.trim直接 ...
HTTP响应常见状态码
状态码
描述
100-199
成功接收请求, 要求客户端继续提交下一次请求才能完成整个处理过程
200-299
成功接收请求并已完成整个处理过程,常用200
300-399
为完成请求, 需进一步细化需求: 例如: 请求的资源已经移动一个新地址,常用302(重定向),307 和304(拿缓存)
400-499
客户端的请求有错误, 包含语法错误或者不能正确执行。 常用404(请求的资源在web服务器中没有),403(服务器拒绝访问, 权限不够)
500-599
服务器端出现错误
200
表示一切正常, 返回的是正常请求结果
302/307
临时重定向,指出请求的文档已被临时移动到别处, 此文档的新的url在location响应头中给出
304
未修改,表示客户端缓存的版本是最新的, 客户端应该继续使用它
403
禁止,服务器理解客户端请求,但拒绝处理它,通常用于服务器上文件或目录的权限设置所致
404
找不到,服务器上不存在客户端所请求的资源
500
服务器内部错误,服务器端的cgi,asp,jsp等程序发生 ...
表达式全集
字符
描述
\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。
^
匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
$
匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
*
匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。
+
匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
?
匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。
{n}
n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹 ...
this与对象原型prototypehoisting状态提升在程序执行前,编译器先由上到下逐行将代码转为机器可读的命令,然后再执行编译后的指令。
实现一个函数,可以返回输入参数是否为质数?
123456789101112131415function isPrimeNumber(m) { if (m <= 1 || m % 1 !== 0) { return false; } var n = 2; while (n < m) { if (m % n === 0) { return false; } else { n++; continue; } } return true;}
实现一个函数,如果传入的参数是字符串,则将该字符串按照字母出现的次数由大到小重新排列并输出;如果传入的参数不是字符串,则将参数输出。
...
Vue和Angular、React.js的相同点和不同点?
与React的相同:
都使用了Virtual DOM
提供了响应式和组件化的视图组件
将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库。
与React的区别:
组件的响应式渲染
React的组件的数据状态发生变化时,它会以该组件为根,重新渲染整个组件子树;而Vue不只去渲染需要渲染的组件。
HTML+CSS的编写
React使用的JSX语法,将HTML、CSS和JS混写;而Vue使用的是templates模板方式,完全融合与经典的Web技术。
与Angular的区别:
与Angular 1对比,Vue的性能更加优越,Angular性能会随着watcher的增加而变慢,而且Angular中一些watcher会触发另一个更新,使得“脏检查循环”可能会运行多次。
Angular事实上必须用TypeScript来开发,而且Angular对于TS的支持非常全面,而Vue暂时对于TS的支持还在改进阶段。
Vue的体积更小,一个包含了 vuex + vue-router 的 Vue 项目 ...
判断一个变量是否为数组?
可靠地检测数组方法
1.利用Object的toString方法
12var list = [1, 2, 3];Object.prototype.toString.call(list);//[object Array]
2.利用ES5的Array.isArray()方法
12var list = [1, 2, 3];Array.isArray(list);//true
数组的原生方法有哪些?
会改变自身的方法:
copyWithin、fill、pop、push、reverse、shift、sort、splice、unshift
不会改变自身的方法:
concat、includes、join、slice、toSource、toString、indexOf、lastIndexOf
遍历方法:
forEach、entries、every、some、filter、find、findIndex
keys、map、reduce、reduceRight、values
如何将类数组的变量转化为数组?
如果是ES6,可以用Array.from()方法 ...