XSS:Cross Site Scrit 跨站脚本攻击(为与 CSS 区别,所以在安全领域叫 XSS),通常是指黑客通过“HTML注入”,篡改了网页,插入了恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种方法。跨站已经不重要,现在叫做“HTML注入”可能更加合适,单因为历史原因XSS这个名字一直保留下来。一,输入检查1.1 格式检查比如用户注册时检查账户、电话号码、邮件和生日等信息,都有一定格式规范。比如 "lordwang" 是一个合法的用户名,而字符串 "lordwang';select..." 不是一个合法的用户名。某种意义上,这些都属于白名单,可以让大部分攻击无效。Node.js
一,进程和线程简介进程是资源分配的最小单位,线程是CPU调度的最小单位 进程:进程是一个有独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,一般定义是:进程由程序,数据集合和进程控制块三部分组成。(进程是资源分配的最小单位)。 线程:在早期的操作系统中并没有线程的概念,随着计算机的发展,为了应对进程之间的切换带来的巨大开销,就发明了线程,线程是程序执行中一个单一的顺序控制流程,一个进程可以有一个或多个线程,各个线程之间共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是c
实现websocket主要是两点,一个是协议的升级,再者就是数据包的解析与封装。目前比较火的websocket框架有socket.io 和 wssocket.io http://socket.io:43.5k star实际上不是一个 WebSocket 库,而是一个实时 pub/sub 框架。简单地说,Socket.io 是包含 WebSocket 功能的一个框架,如果要使用该库作为 server 端的服务,则 client 也必须使用该库,因为它不是标准的 WebSocket 协议,而是基于 WebSocket 再包装的消息通信协议。websockets/ws:9k star强大易用的 we
格式:\033[背景色编号;字色编号m
颜色属性:字色编号:30黑,31红,32绿,33黄,34蓝,35紫,36深绿,37白色背景编号:40黑,41红,42绿,43黄,44蓝,45紫,46深绿,47白色例子:console.log('\033[42;30m Error \033[40;32m 出错了 \033[0m');
用绿底(42)黑字(30)显示“Error”,然后使用黑底(40)绿字(32)显示余下的信息,最后关闭所有属性(\033[0m)其他标记:\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
Node.js 要求 ES6 模块采用.mjs 作为后缀。只有.mjs后缀的文件可以使用import或者export命令。如果不希望将后缀名改成.mjs,可以在项目的package.json文件中,指定type字段为module。{
"type": "module"
}
这时还要使用 CommonJS 模块,那么需要将 CommonJS 脚本的后缀名都改成.cjs。ES6 模块与 CommonJS 模块尽量不要混用。require()命令不能直接加载 ES6 模块,因为它是同步加载。ES6 模块的import命令可以加载 CommonJS 模块,但是只能整体加载,不能只加载单一的输
依赖注入(DI)和控制反转(Ioc) 是从两个不同角度描述的同一个概念。当某个对象(调用者)需要调用另一个对象(被调用者,即被依赖对象)时,调用者通常会采用“new 被调用者”的代码方式来创建对象.在使用某些框架之后,对象的实例不再由调用者来创建,而是由容器来创建,容器负责控制程序之间的关系,控制权由应用代码转移到了框架,被称为“控制反转”。从框架的角度来看,框架负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是“依赖注入”。容器,字面上理解就是装东西的东西。在这里容器容纳的是对象、对象的描述(类、接口)或者是提供对象的回调,通过这种容器,可以实现 “依赖注入(
简介03 年 Eric Evans 的 Domain Driven Design 一书,以及后续 Vaughn Vernon 的 Implementing DDD , Uncle Bob 的 Clean Architecture 等书,真正的从业务的角度出发,为全世界绝大部分做纯业务的开发提供了一整套的架构思路。 POP,OOP,DDD是如何解决问题面向过程编程(POP),接触到需求第一步考虑把需求自顶向下分解成一个一个函数。并且在这个过程中考虑分层,模块化等具体的组织方式,从而分解软件的复杂度。当软件的复杂度不是很大,POP也能得到很好的效果。 面向对象编程(OOP),接触到需求第一步考虑
一,流光按钮 CSS 样式.btn{
width: 100px;
height: 50px;
border-radius: 50px;
text-align: center;
background-color:aqua;
line-height: 50px;
background-image: linear-gradient(to left , #EAD6EE,#A0F1EA,rgb(124, 241, 241),#e3a5f0,#EAD6EE);
background-size: 400%;
}
@keyf
方法一,基本方法为每一份主题写一份 CSS 文件,批量替换颜色,例如 style.css、style.dark.css。如果需要切换模式的花,只需要 改变 link 指向的 CSS 文件路径。方法二,使用 SCSS 等工具引入颜色变量在方法一的基础上,生成多个 CSS 文件路径。方法三,使用CSS自定义属性(变量)CSS 原生变量支持,同样一个颜色值可能在成千上百个地方被使用到,如果这个值发生了变化,需要全局搜索并且一个一个替换(很麻烦哎~)。自定义属性在某个地方存储一个值,然后在其他许多地方引用它。属性名需要以两个减号(--)开始,大小写敏感,属性值可以是任何有效的CSS值。和其他属性一样,
一,什么是懒加载?一般情况下,当一个页面加载以后,图片也会开始全部加载,这样会增加客户端和服务器的压力。为了减轻负担,让图片先出现在浏览器视口以后再进行加载。方法一,使用三个相关API:1,获取可视区域的高度 document.documentElement.clientHeight2,获取元素到文档顶部的高度 element.offsetTop3,获取浏览器窗口顶部与文档顶部之间的距 document.documentElement.scrollTopvar imgs = document.querySelectorAll('.lazyload-img');
//循环获取直到页面顶部的高
1, MySQL生成随机数的函数 RAND()select RAND();
0.10994928061026081
2, 获取上面那个随机数以后,便可以通过 CEILING() 向上取整 或 FLOOR() 向下取整,以获取随机整数。CEILING向上取整:SELECT CEILING(RAND() * 10);
RAND() 函数生成 0 到 1 之间的随机小数,乘以 10 后得到 0 到 10 之间的随机小数,然后使用 CEILING() 函数向上取整为整数,得到 1 到 10 之间的随机整数。FLOOR向下取整:SELECT FLOOR(RAND() * 10) + 1;
RAND(
介绍一个 Koa.js 的 SESSION 的中间件安装npm install koa-session
例子const session = require('koa-session');
const Koa = require('koa');
const app = new Koa();
app.keys = ['some secret hurr'];
const CONFIG = {
key: 'koa:sess', //cookie key (default is koa:sess)
maxAge: 86400000, // cookie的过期时间 maxA
介绍koa-body 是一个可以帮助解析 http 中 body 的部分的中间件,包括 json、表单、文本、文件等。还有一个常用的类似扩展 koa-bodyparser对比其中,koa-bodyparser 不可以直接处理文件,需要上传文件的时候,还需要引用另外一个中间件 koa-multer,项目地址和使用数量如下:koa-body Used by 31.6khttps://github.com/dlau/koa-bodykoa-bodyparser Used by 73.1k https://github.com/koajs/bodyparser代码示例// 初始化
const koa
简介
Node.js 的 JSON Web Token 模块有很多,我选择使用 jsonwebtoken。
项目地址: https://www.npmjs.com/package/jsonwebtoken
安装
npm install jsonwebtoken --save
用法
const jwt = require("jsonwebtoken")
const secret = "some word";
let payload = {};
payload.data = data || {}; //token 中包含的数据
payload.ctime = (new Date(
一,Fetch API 介绍
Fetch API提供了一个 JavaScript 接口,用于访问和操纵HTTP的请求和响应等。提供了一个全局 fetch()方法来跨网络异步获取资源。
fetch()是 XMLHttpRequest 的升级版,用于在 JavaScript 脚本里面发出 HTTP 请求。
二,基本用法:
fetch('https://test.com/api/info')
.then(response = response.json())
.then(json = console.log(json))
.catch(err = console.log('Reque
简介
Nodemailer 是一个简单易用的 Node.JS 邮件发送模块(通过 SMTP,sendmail,或者 Amazon SES),支持 unicode,你可以使用任何你喜欢的字符集。
安装
npm install nodemailer --save
代码示例:
const nodemailer = require('nodemailer');
const config = {
smtp: {
host: "smtp.163.com",
username: "123123123@163.com",
password: "123123123"
}
};
常用的Node.js图片处理模块,有node-image、sharp和jimp。node-image很轻量,但是处理gif有点问题,更新还有点慢了。sharp跨操作系统部署的时,常常还需要编译一下。所以,jimp也是一个很好的选择。介绍:An image processing library for Node written entirely in JavaScript, with zero native dependencies.看这个官方介绍也说了,完全使用Node写的的库,无原生依赖。 支持图片类型bmp、gif、jpeg、png和tiff。安装:npm install --save j
简介:cheerio 是一个HTML解析器,cheerio实现了核心jQuery的子集。常用来解析采集来的HTML数据。安装:npm install cheerio
基础使用:const cheerio = require('cheerio');
var htmlString = ` ul id="fruits"
li class="apple" 苹果 /li
li class="orange" 橙子 /li
li class="pear" 梨 /li
/ul `;
$ = cheerio.load(htmlString);
$('.apple', '#fruits'
ctx.request.ip请求远程地址。 当 app.proxy 设置为 true 时,支持 X-Forwarded-Host。1, 在 Nginx 反向代理配置 proxy_pass 的部分添加这样一行。 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2, 在 Koa 应用里设置 app.proxy 为 true。X-Forwarded-For 定义X-Forwarded-For (XFF) 在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地址,这个消息首
所有标签