3.6.1. 理解浏览器在处理javascript及渲染CSS的机制
3.6.4. 浏览器在加载javascript,CSS有时在前面有时在后面,为什么?
3.7.1. 软件出错时怎么个报警法?是否有详尽的log记录?
3.9.1. XML sitemap的意义,可以让搜索引擎了解你的网站地图
3.9.2. 了解 robots.txt 和搜索引擎爬虫是如何工作的
3.9.5. 网页Meta信息中title,description等的重要性
3.10.1. 访问网站的用户操作行为是怎么样的?页面的访问频率占比如何?因为测试的精力和侧重点也要根据这个数据而定
3.10.3. 不要直接显示不友好的错误提示,是否有友好的提示信息?
3.12.1. HttpWatch,基于IE的网络数据分析工具,包括网页摘要,Cookies管理,缓存管理,消息头发送/接受,字符查询,POST 数据和目录管理功能等
3.12.2. FireBug,用途同上,基于firefox的
3.12.3. Yslow,前端网站性能工具,显示测试结果的分析,分为等级、组件、统计信息
3.12.4. Fiddler,强大的web前端调试工具,它能记录/拦截所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,也可用于安全测试
3.12.5. Chrome扩展程序:浏览器兼容性检测工具,分析网站的兼容性情况
3.12.6. ShowIP:显示访问网站的IP,web测试中你是否经常因为访问的网站IP不对,而被开发人员BS呢?它能帮助到你。
——长度、数据类型、必填、重复、空格、sql注入以及一些业务相关约束
——默认值、数据完整性/正确性、第一个/最后一个/中间一个选取、手动输入值模糊匹配、联动选择;业务常见选取的操作
——是否支持回车/单击、快速多次点击是否重复提交表单、网络中断(弱网)提交、提交之后是否有提示、提交后内容是否加密、提交是否做权限校验控制、多人针对表单同时操作的场景测试
不需要测试三个组合的全部级组合。因为前面针对所有单个条件的搜索、两个组合的所有组合进行测试了,那么在这里选择2-3组三种组合进行测试即可。
1)开始时间<=结束时间,测试一个小时、跨时、当天、跨天、跨月、跨年的数据
2)开始时间大于/小于当前时间,若是针对出生年月搜索,验证大于的情况;若是定时任务时间搜索验证小于的情况
5)删除一个有关联性的数据,(如删除QQ分组,组下好友会有提示)
6)所有删除数据操作,要注意相应查询页面及其关联界面的数据是否及时更新
cookies/session通常用来存储用户信息,Cookie通过在客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份
1)打开WEB系统后,在浏览器默认存储cookies的目录下看此cookies目录是否存在。
2)已知cookies的保存时间,测试时间范围之内和之外的cookies文件是否正常
3)将浏览器下的所有cookies文件全部删除。再次登录web系统,会怎么处理
在web应用技术中,数据库就是一个“仓库”,我们在进行功能测试的任何操作都可以归溯到是对于数据库的增删改查
(1)页面清单是否完整(是否已经将所需要的页面全部列出来了)
(2)页面是否显示(在不同分辨率下页面是否存在,在不同浏览器版本中页面是否显示)
(3)页面在窗口中的显示是否正确,美观(在调整浏览器窗口大小时,屏幕刷新是否正确)
(1)页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,如按钮,单选框,复选框,列表框,输入框等)
(4)元素的外形,摆放位置是否合理(如按钮,单选框,复选框,列表框,输入框等)
(5)元素基本功能是否实现(如文字特效,动画特效,按钮,超链接等)
(7)对模块的具体功能进行测试时可以列出功能模块所有的功能,进行排列组合,测试所有情况
(8)查询功能分2种--验证操作结果,打开页面时自动显示结果,则不需要特别强调;需要手工操作进行查询,则每次在其他功能完成后进行
80%的最终用户响应时间花在前端程序上,而其大部分时间则花在各种页面元素,如图像、样式表、脚本和Flash等,的下载上。减少页面元素将会减少HTTP请求次数。这是快速显示页面的关键所在
表示从用户在浏览器键入url按下回车键一刻开始到页面开始有反应(用户可以在页面中看见一点点内容)为止。经常能感觉到的一个信号就是网页开始显示title。
表示从页面开始显示内容,到浏览器开始触发OnLoad函数这一时间段。只有当初始的文本和所引用的对象加载完成,浏览器才开始触发OnLoad函数
表示从上一时间段末到整个网页完全加载完成(所有OnLoad函数以及相关的动态资源加载完成)。在网页中含有timeout或定时刷新之类处理时较为难判断结束点。
网页由初始的html文本中嵌入图片以及通过XHR或者修改dom树动态加载的内容组成,css负责样式,js负责行为。所以当网页资源过多为了下载资源,客户端和服务器的网络来回就更多。
包括html网页请求,css、js资源下载及其它网络请求。优化的目标之一是要尽量减少请求数。
b. Total Number of HTTP 300s/400s/500s
表示返回状态为300(重定向)、400(客户端错误)、500(服务器端错误)的http请求。尽量避免这些请求,以提高页面load的时间。造成这些状态的原因经常是服务器的实施、配置和部署问题。
构成网页元素总的大小。图片或者js库的增加都会对下载时间造成重要的影响。
d. Total Size of Images/CSS/JS
e. Total Number of XHR(XMLHttpRequest) Requests
通过js异步从服务器端获得数据的请求数。一些js框架提供了跟服务器端的更新机器,就是XHR请求。通过配置可以减少XHR请求的数目
浏览器底层的网络连接对资源的下载速度有很大影响。资源的下载过程分为很多阶段
dns 查询的时间。网页请求会产生一次寻找该网页资源所在主机的dns查询。在同个域名进行网页切换不会造成新的dns查询。
指浏览器和服务器之间建立tcp/ip连接的时间,对于ssl连接包括握手的时间。网络连接过慢、使用ssl、使用短连接而非常连接都是造成connect time较多的原因。
这一指标与浏览器和服务器之间的连接速度相一致,通过减小传输内容或使用cdn来降低Transfer Time。
等待时间和同一个域中服务资源的数量直接相关。每个域的浏览器的物理网络的限制,导致资源等待可用的连接。减少资源的数量,或将资源散布在不同的域,能将这一时间降低。平均等待时间的大小更能反映等待时间是否需要注意。
f. Number of Domains / Single Resource Domains
部署网站资源的域主机数量是很重要的,因为它影响的DNS,连接和等待时间。
专门用户资源下载的域是必要的,他将直接减少等待时间。应避免单一的资源域,否则你将为dns查询以及资源下载付出昂贵的代价
客户端发送一个HTTP请求至收到HTTP响应头信息消耗的时间。
客户端从Web服务器请求一个完整的页面(包括内嵌对象)所消耗的时间。
建立TCP连接时,从客户端发送SYN请求到服务器返回SYN/ACK的时间。
客户端发出访问请求后,与Web服务器成功建立TCP连接所需的时间。
并发连接数(Simultaneous Connections)
Web服务器能够与客户端建立并保持同时打开的TCP连接数,最大并发连接数反映了Web服务器所对其客户多个连接的处理能力。
客户端与Web服务器在单位时间(1s)新建立的TCP新建连接的个数。
事务处理次数(Cumulative Transactions)
Web服务器处理HTTP Transaction的累计总数定义为事务处理次数。
事务处理速率(Transactions Per second)
在单位时间(1s)内成功响应HTTP Transaction的个数。
资源利用率是指Web服务器不同资源(如服务器的CPU,内存、磁盘、网络带宽等)的使用程度,它常常用占资源的最大可用量的百分比来衡量。Web服务器资源利用率指标包括CPU占用率、内存占用率、磁盘占用率、可用网络带宽。
确定在各种工作负载下系统的性能,通过在被测系统上不断增加压力,直到性能指标超过预定指标或某种资源使用已经达到饱和状态。主要目的:寻找Web服务器的处理能力极限,包括支持的最大用户、业务等处理能力的约束;了解Web系统性能容量;配合Web系统进行调优。测试角度可以是并发用户数、业务量、数据量等不同方面的负载。
通过确定一个系统的瓶颈或者不能再接收的极限点,来获得系统所能提供的最大服务级别的测试。压力测试方法测试Web服务器在资源处于饱和或超负荷的情况下(例如CPU、内存等在饱和状态下),系统能够处理的HTTP请求或用户会话的能力以及系统是否会出现错误。其主要意义是通过测试、调优保证系统即使在用户的极端压力下也不会出错甚至或者导致系统崩溃。因此可以认为是一种在极端压力下的稳定性测试。
疲劳强度测试也称持久度测试(durability),可以被当作是一个长期的负载或压力测试,它是选择Web服务器稳定运行情况下能够支持的最大并发用户数,持续执行一段时间业务,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。疲劳强度测试可以采用工具自动化生成的方式进行测试,也可以手工编写程序测试,其中后者占的比例较大。
一般情况下以Web服务器能够正常稳定响应请求的最大并发用户数进行一定时间的疲劳测试,获取交易执行指标数据和系统资源监控数据。如出现错误导致测试不能成功执行,则及时调整测试指标,例如降低用户数、缩短测试周期等。还有一种情况的疲劳测试是对当前系统性能的评估,用系统正常业务情况下并发用户数为基础,进行一定时间的疲劳测试。
XSS又叫CSS(CROSS SET SCRIPT),跨站脚本攻击。它指的是恶意攻击者往WEB页面里插入恶意的html代码,当用户浏览该页面时,嵌入其中的html代码会被执行,从而达到恶意用户的特殊目的;(钓鱼、盗取cookie、操纵受害者的浏览器、蠕虫攻击)
服务器端获取http请求中的参数,未经过滤直接输出到客户端。如果这些参数是脚本,它将在客户端执行(钓鱼常见)。
用户输入的数据存在服务器端(一般存在数据库中),其他用户访问某个页面时,这些数据未经过滤直接输出。这些数据可能是恶意的脚本,对其他用户造成危害。(挂马常见)
在允许上传文件的应用中,攻击者上传一个包含恶意代码的html或者txt文件,用户浏览这些文件执行恶意代码;
一般的应用中上传图片最普遍,如果图片中包含恶意代码的html或者txt文件,,低版的IE直接请求这个图片时,将忽略Content-Type执行图片中的代码。
攻击者构造一个包含恶意Javascript的URL,然后引诱用户请求这个URL。服务器收到请求后没有返回恶意的Javascript。
强迫受害者的浏览器向一个易受攻击的Web应用程序发送请求,最后达到攻击者所需要的操作行为。
恶意请求会带上浏览器的Cookie。受攻击的Web应用信任浏览器的Cookie。
查询语句,查询数据库中的敏感内容,绕过认证添加、删除、修改数据、拒绝服务。
和SQL注入原理一样,XML是存储数据的地方,如果在查询或修改时,如果没有做转义,直接输入或输出数据,都将导致XML注入漏洞。攻击者可以修改XML数据格式,增加新的XML节点,对数据处理流程产生影响。
Web应用程序接收到用户提交的URL参数后,没有对参数做”可信任URL”的验证,就向用户浏览器返回跳转到该URL的指令。(钓鱼攻击)
文件系统中../代表上级目录,通过一个或多个../跨越目录限制。
Web应用程序在处理用户上传的文件时,没有判断文件的扩展名是否在允许的范围内,或者没检测文件内容的合法性,就把文件保存在服务器上,甚至上传脚本木马到web服务器上,直接控制web服务器。(未限制扩展名、未检查文件内容、病毒文件)
Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或判断数据所属人时,从用户提交的request参数(用户可控数据)中,获取了数据所属人id,导致恶意攻击者可以通过变换数据ID,或变换所属人id,修改不属于自己的数据。
由于web应用程序没有做权限控制,或仅仅在菜单上做了权限控制,导致的恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升目的。
web漏洞扫描:Appscan、Burpsuite(可抓取、拦截web报文并进行修改)
fiddler工具:可抓取web报文,并可构造报文,进行web接口测试
主流浏览器:IE,FireFox、Chrome、Safari等,浏览器的差异主要体现在javaScript、ActiveX和HTML解码方法处理不同,因此需要在web系统测试时注意,尤其是通过某个控件跳转浏览器时更需要注意。
主要的操作系统 window XP ,windows 7、windows 8,mac系统。在测试过程中需要关注被测试对象在不同操作系统上的表现、尤其是有数据交互时。
不同的显示分辨率可能会导致web页面变形,严重时会导致功能无法使用,因此需要测试在不同分辨率下的系统表现。常见的分辨率:1280X1024、1024X768、800X600等,即使在某些分辨率下不能工作,也需要给出提示信息。
在web系统应用了一些控件,如文本编辑器,文件上传下载,这些控件也需要考虑在不同的操作系统,不同的分辨率下的应用表现。
测试浏览器与服务器的接口。用户输入的数据是输入到的前端页面上,怎样把这些数据传递的后台的呢?通过http协议的get与post请求来实现前后端的数据传递。这也可认为是接口测试。
第三方接口,这个很典型的例子就是第三方支付,比如在我们应用中在充流量时,交话费时,都会调用第三方支付接口。
请求是否正确,默认请求成功是200,如果请求错误也能返回404、500等。
接口的安全性,一般web都不会暴露在网上任意被调用,需要做一些限制,比如鉴权或认证。
driver.find_element_by_tag_name
driver.find_element_by_link_text
driver.find_element_by_partial_text
driver.quit() #关闭所有窗口且安全关闭session
driver.switch_to.default_content()
driver.switch_to.window(name)#切换窗口
driver.page_source #获取页面html源代码
driver.set_window_size(width,high)
driver.find_element_by_xpah(findType).clear()
driver.find_element_by_xath(findType).click()
driver.find_element_by_xath(findType).send_keys()
drag_and_drop() #拖拽---从一个地方拖到另一个地方
from selenium.webdriver.common.actionchains import ActionChains
ActionChains(driver).context_click(element).perform()
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
driver.find_element_by_id(id).send_keys(Keys.BACK_SPACE) #删除键
driver.find_element_by_id(id).send_keys(Keys.SPACE) #空格键
driver.find_element_by_id(id).send_keys(Keys.ENTER) #回车键
driver.find_element_by_id(id).send_keys(Keys.TAB) #制表键
driver.find_element_by_id(id).send_keys(Keys.ESCAPE) #回退,取消(ESC)
driver.find_element_by_id(id).send_keys(Keys.CONTROL,'a') #全选(Ctrl+a)
driver.find_element_by_id(id).send_keys(Keys.CONTROL,'c') #复制(Ctrl+c)
driver.find_element_by_id(id).send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+v)
driver.find_element_by_xath(findType).get_attribute()
driver.find_element_by_xath(findType).text
driver.find_element_by_xath(findType).tag_name #获取元素标签名
driver.find_element_by_xath(findType).is_selected() #判断返回的元素结果是否被选中
driver.find_element_by_xath(findType).submit()
driver.find_element_by_xath(findType).size #获取元素尺寸
driver.find_element_by_xath(findType).is_displaed() #判断元素是否可见
driver.find_element_by_xath(findType).send_keys(file) #针对普通input标签的上传文件可以使用此方法
显示等待:WebDriverWait(driver, timeout,poll_frequency,ignored_exceptions=None).until(method,message)
switch_to_frame()默认直接取表单的id或者name属性来切换
driver.current_window_handle #获取当前窗口句柄
driver.window_handles #返回所有窗口句柄到当前会话
driver.switch_to_window() #进入窗口,用于切换不同窗口
driver.switch_to.alert.accept()
driver.switch_to.alert.dismiss()
driver.get_screenshot_as_file(filename) #截图当前窗口
driver.get_screenshot_as_base64()
A类:A类地址规定网络号字段为1字节,第一位固定为0来标识该类别,只有7位可供使用,有=126个可指派的网络号。其中有2个特殊的网络号,一个是网络号字段为全0,它是保留地址,意思是“本网络”,如0.0.0.35代表“在这个网络上主机号为35的主机”;另一个是127字段,保留用于环回测试,例,常见的127.0.0.1代表本地主机。所以A类地址的网络号范围为1~126。主机号3字节,最大主机数为,这里也要减去2。一个是主机号全0,表示网络的地址,如,一主机IP为5.6.7.8,则该主机所在的网络地址就是5.0.0.0。另一个是全1,表示该网络内的所有主机,如,125.255.255.255代表了125.0.0.0这个网络上的所有主机。
B类:B类地址网络号字段为2字节,前两位固定为10,有14位可用来分配,有个可指派的网络号。这里减1的原因是一般128.0.0.0是不指派的,B类可指派的网络地址是128.1.0.0。
C类:C类地址网络号字段为3字节,前3位固定为110,有21为可用来分配。
A类地址的默认子网掩码,255.0.0.0,B类地址的默认子网掩码255.255.0.0,C类地址的默认子网掩码255.255.255.0。
网关是一个网段的出入口。一个网络想要和这个网络外的网络进行通信,必须通过网关
一个网段是可以没有网关,也可以没有DHCP服务器,即设置为静态IP,由交换机、集线器等连接设备就可相互访问。但没有网关就意味着只能在这个局域网内互相访问,不能访问局域网外的任何网络。很多局域网中都采用了路由来接入网络,路由器的WAN口连接到外部网络上,LAN口IP设置为网关。网关的地址可以是局域网段内主机地址的任意一个,不一定是设置为192.168.1.0,它只是用来标识网关。
信号在双绞线中传输的过程中信号的功率会逐渐衰减,当信号衰减到一定程度时将造成信号失真,所以为了方便较远距离的两计算机进行通信,就在这两个计算机之间安装一个中继器,让信号能传的更远。中继器的作用就是整理已经衰减的信号,重新产生完整的信号再继续传送。中继器工作在物理层,只是起到了扩展传输距离的作用,对高层是透明的。
集线器实际上就是一种多端口的中继器,一般有4、8、16、24、32等数量的接口。
网桥是早期的两端口的二层网络设备,网桥像是一个聪明的中继器,如前所说,中继器只是简单的连接了两个网络,任何数据都可以通过中继器发出,但网桥有所不同。网桥除了扩展网络的距离或范围,还能提高网络的性能和安全性。
网桥可以连接两个网络,网桥A端口连接A子网,B端口连接B子网。网桥中有一个信息表,我们可以把这个信息表看作两部分,一部分记录了A子网中设备的MAC地址,另一部分记录了B子网中的MAC地址,当A发出一个包,网桥可以查看目的地址到底是A中的还是B中的,若是A中的就不进行转发,是B中的才进行转发。所以网桥与中继器不同的是隔离了两个子网,而不是任意的转发,拥有了学习功能。
网桥只有两个端口,有着局限,所以为了实现多对多通信,产生了交换机。集线器同样也是多对多通信,但集线器是广播的方式将数据包发到目的主机上,交换机却不一样,交换机与网桥一样具有学习功能。
交换机也有一个表,它记录着每个端口对应的主机的MAC地址。当交换机收到数据包后,可以解析出该数据包目的地址的MAC地址。然后根据该MAC地址将包转发到对应的端口去。
交换机有很多的类型,我们常说的交换机一般指的是传统的交换机,它工作在二层。但随着交换机的发展,出现了三层交换机,它除了拥有二层交换机的交换技术外,还在三层实现了数据包的高速转发及路由功能。
俗称的“猫”。我们都知道,网线中一般传输的数字信号,0和1,而电话线中传输的是模拟信号,这两种信号并不能直接进行通信,就需要调制解调器进行“翻译”。
1.硬件环境不同:C/S 一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务。B/S 建立在广域网之上的, 不必是专门的网络硬件环境。例如电话上网,,租用设备.,信息管理,有比C/S更强的适应范围,一般只要有操作系统和浏览器就行。
2.对安全要求不同:C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强, 一般高度机密的信息系统采用C/S 结构适宜,可以通过B/S发布部分可公开信息。B/S 建立在广域网之上, 对安全的控制能力相对弱,面向是不可知的用户群。
3.对程序架构不同:C/S 程序可以更加注重流程,,可以对权限多层次校验,,对系统运行速度可以较少考虑。B/S 对安全以及访问速度的多重的考虑,,建立在需要更加优化的基础之上,比C/S有更高的要求。 B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk 2000 Exchange 2000等,全面支持网络的构件搭建的系统.。SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟。
4.软件重用不同:C/S 程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好。B/S 对的多重结构,要求构件相对独立的功能,能够相对较好的重用。
5.系统维护不同:系统维护在是软件生存周期中,开销大。重要C/S 程序由于整体性,,必须整体考察, 处理出现的问题以及系统升级。升级难,可能是再做一个全新的系统。B/S程序由构件组成,方便构件个别的更换,实现系统的无缝升级,系统维护开销减到最小,用户从网上自己下载安装就可以实现升级。
6.处理问题不同:C/S 程序可以处理用户面固定,并且在相同区域,,安全要求高需求,与操作系统相关,应该都是相同的系统。B/S 建立在广域网上,面向不同的用户群,分散地域,这是C/S无法作到的,与操作系统平台关系最小。
7.用户接口不同:C/S 多是建立的Window平台上,表现方法有限。对程序员普遍要求较高。B/S 建立在浏览器上,,有更加丰富和生动的表现方式与用户交流,并且大部分难度减低,减低开发成本。
8.信息流不同:C/S 程序一般是典型的中央集权的机械式处理,交互性相对低。B/S 信息流向可变化, B-B、 B-C、 B-G等信息流向的变化,更象交易中心。
数据链路层:将比特组合成字节,进而组合成帧;用MAC地址访问介质;错误可以被发现但不能被纠正
协议:IP、ICMP、ARP、PARP、OSPF、IPX、RIP、IGRP等
表示层:数据表示;加密与解密、数据的压缩与解压缩、图像编码与解码等特殊处理过程
协议:FTP、DNS、Telnet、SNMP、SMTP、HTTP、WWW、NFS
全双工通信(TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据)。
1、客户端TCP向服务端TCP发送一个特殊的TCP报文段,不包含应用层数据,报文中SYN=1,设置一个初始号client_isn,记录在报文段的序列号seq中。
2、SYN报文段到达服务器后,为该TCP链接分配缓存和变量,并向客户端发送允许链接的报文段。其中,SYN = 1, ACK = client_isn+1,seq = server_isn;
3、客户端收到允许连接的报文后,客户端也给连接分配缓存和变量,客户端向服务端发送一个报文段,其中ACK = server_isn+1,SYN = 0,并且由于连接已经建立所以现在可以携带应用层数据。
1. 客户端发送连接释放报文段,报文中FIN = 1, seq = u;
2. 服务端接收到连接释放报文后发出确认报文,其中ACK = 1; seq = v; ack = u + 1;
3. 服务端在发送完数据后,发送连接释放报文FIN = 1, seq = w, ack = u + 1;并停止向客户端发送数据。
4. 客户端收到连接释放报文后,发送确认报文, ACK = 1; seq = u + 1; ack = w + 1;并且进入等待2MSL,防止服务端没有接收到确认报文,重传报文。并且使连接产生的报文都消失。
流量控制针对的是点对点之间的(发送方和接收方)之间的速度匹配服务,因为接收方的应用程序读取的速度不一定很迅速,而接收方的缓存是有限的,就需要避免发送的速度过快而导致的问题。拥塞控制是由于网络中的路由和链路传输速度限制,要避免网络的过载和进行的控制
慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。一般一开始为1个MSS,之后翻倍这样来增加,呈指数增长。其中1、慢启动过程有一个阈值ssthresh,一旦到达阈值就进入拥塞避免模式。这是第一种离开结束慢启动的方式2、如果收到了一个丢包提示,就将cwnd设为1并且重新开始慢启动过程,这时要把阈值ssthresh设为当前cwnd值的一半。3、如果收到了三次冗余的ACK,就执行一次快速重传并且进入快速恢复状态,这是最后一种结束慢启动的过程。
进入拥塞避免说明cwnd值大约是上一次遇到拥塞是的一半,这时候不能翻倍,而是将cwnd的值每次增加一个MSS。结束的过程有两种可能:1、当出现超时时,将cwnd值设为1个MSS,并且将ssthresh阈值设为当前cwnd值的一半。2、当收到三个冗余ACK时,将ssthresh阈值设为当前cwnd值的一半,并且将cwnd值设为当前cwnd值的一半加3,即ssthresh阈值加3,并且进入快速恢复状态
快速恢复就是指进入快速恢复前的一系列操作,即将ssthresh阈值设为当前cwnd值的一半,并且将cwnd值设为当前cwnd值的一半加3,即ssthresh阈值加3,之后进入拥塞避免状态,即每次cwnd的值加1个MSS
简单快速: 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
(——keep alive产生由来,Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接)
无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。(——cookie与session的产生由来,为了解决此问题)
http://host[":"port][abs_path]
abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。
HTTP协议用于客户端与服务器之间的通信,在通信线路两端,必定一端是客户端,另一端是服务器。客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。
HTTP协议属于应用层,建立在传输层协议TCP之上。客户端通过与服务器建立TCP连接,之后发送HTTP请求与接收HTTP响应都是通过访问Socket接口来调用TCP协议实现
1) 客户端连接到Web服务器:一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。
2) 发送HTTP请求:通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3) 服务器接受请求并返回HTTP响应:Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4) 释放连接TCP连接:若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5) 客户端浏览器解析HTML内容:客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
HTTP+SSL=HTTPS (在TCP与HTTP之间多了一层SSL/TSL协议)
非对称加密:加密和解密使用不同密钥的加密算法,称为非对称加密。非对称加密需要2个密钥(一对):公钥、私钥(公钥为对外公开的密钥,所有人都可以获取到;私钥不对外公开,只有持有者知道)。使用公钥加密,只能使用私钥解密,反之亦然。
HTTPS采用混合加密机制(对称+非对称):HTTPS的通信过程使用对称加密技术(优点:比非对称加密处理速度快),而使用非对称加密技术用于交换通信过程使用的对称密钥Master secret。(使用非对称加密技术传输对称密钥,保证对称密钥安全,从而保证对称加密通信的安全性)
发送者:消息明文-->hash运算-->摘要值A-->私钥加密-->数字签名(数字签名+消息原文-->接受者)
接受者:数字签名-->发送者公钥解密-->摘要值A,消息原文-->hash运算-->摘要值B,摘要值A<--对比-->摘要值B
证明发送方的身份,确定是否由发送方签名并发出来的,因为别人假冒不了发送方的签名;
用户首先产生自己的密钥对,将公钥及个人信息发送给第三方认证机构(CA),CA经过一些必要操作对用户身份进行核实,核实后将给用户签发数字证书。数字证书组成包括:用户个人信息及用户公钥+CA的数字签名。
客户端拿到服务器的数字证书后,首先使用CA的公钥(浏览器会默认内置CA根证书公钥,可对CA及其子机构颁发的证书签名进行解密)对签名解密
CA机构名称不存在或伪造:浏览器不认识,直接认为是危险证书;
可对CA签名解密,解密后的摘要值A与客户端计算的摘要值B不相等,说明证书信息被篡改,认为是危险证书
可对CA签名解密,解密后的摘要值A与客户端计算的摘要值B相等,说明证书是有效的且证书信息完整,客户端直接获取证书内服务端的公钥,从而保证公钥确实是服务端的不是别人的,以此来验证服务器身份,确保与服务端的安全通信;
2、【服务端】server_hello+server_certificate+server_hello_done
4、【客户端】Client_key_exchange+change_cipher_spec+encrypted_handshake_message
5、【服务端】change_cipher_spec+encrypted_handshake_message
6、建立加密通信:开始使用协商密钥Master secret与对称加密算法进行加密通信
通信慢:和HTTP相比,SSL/TSL通信部分消耗网络资源。而SSL/TSL通信部分,又因为要对通信进行处理,所以时间上又延长了;
资源消耗导致处理速度慢:由于HTTPS还需要做服务器、客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源;
什么是GET, POST, session, cookie等
Cookie(复数形态:Cookies)是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
Cookie是由服务端生成的,发送给客户端(通常是浏览器)的。Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie:
内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。
硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。
①该用户生成一个唯一的识别码(Cookie id),创建一个Cookie对象;
②默认情况下它是一个会话级别的cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。如果网站希望浏览器将该Cookie存储在磁盘上,则需要设置最大时效(maxAge),并给出一个以秒为单位的时间(将最大时效设为0则是命令浏览器删除该Cookie);
③将Cookie放入到HTTP响应报头,将Cookie插入到一个 Set-Cookie HTTP请求报头中。
浏览器收到该响应报文之后,根据报文头里的Set-Cookied特殊的指示,生成相应的Cookie,保存在客户端。该Cookie里面记录着用户当前的信息。
当用户再次访问该网站时,浏览器首先检查所有存储的Cookies,如果某个存在该网站的Cookie(即该Cookie所声明的作用范围大于等于将要请求的资源),则把该cookie附在请求资源的HTTP请求头上发送给服务器
服务器接收到用户的HTTP请求报文之后,从报文头获取到该用户的Cookie,从里面找到所需要的东西
①Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
②由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题。(除非用HTTPS)
③Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。
Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。Session是一种服务器端的机制,Session 对象用来存储特定用户会话所需的信息。
Session由服务端生成,保存在服务器的内存、缓存、硬盘或数据库中。
当用户访问到一个服务器,如果服务器启用Session,服务器就要为该用户创建一个SESSION,在创建这个SESSION的时候,服务器首先检查这个用户发来的请求里是否包含了一个SESSION ID,如果包含了一个SESSION ID则说明之前该用户已经登陆过并为此用户创建过SESSION,那服务器就按照这个SESSION ID把这个SESSION在服务器的内存中查找出来(如果查找不到,就有可能为他新创建一个),如果客户端请求里不包含有SESSION ID,则为该客户端创建一个SESSION并生成一个与此SESSION相关的SESSION ID。这个SESSION ID是唯一的、不重复的、不容易找到规律的字符串,这个SESSION ID将被在本次响应中返回到客户端保存,而保存这个SESSION ID的正是COOKIE,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
我们知道在IE中,我们可以在工具的Internet选项中把Cookie禁止,那么会不会出现把客户端的Cookie禁止了,那么SESSIONID就无法再用了呢?找了一些资料说明,可以有其他机制在COOKIE被禁止时仍然能够把Session id传递回服务器。
经常被使用的一种技术叫做URL重写,就是把Session id直接附加在URL路径的后面一种是作为URL路径的附加信息,表现形式为: http://…./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764;
另一种是作为查询字符串附加在URL后面,表现形式为: http://…../xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
还有一种就是表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把Session id传递回服务器
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST没有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中
Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比拟艰难的。
而Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。
Cookie存储在浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。 假如选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。而假如选择Session就省事多了,反正是放在服务器上,Session里任何隐私都能够有效的保护。
只需要设置Cookie的过期时间属性为一个很大很大的数字,Cookie就可以在浏览器保存很长时间。 由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默许为–1,只需关闭了浏览器(一次会话结束),该Session就会失效。
Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。而Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。
Cookie支持跨域名访问,例如将domain属性设置为“.baidu.com”,则以“.baidu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。
HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。(——cookie与session的产生由来,为了解决此问题)
测试可以证明产品是失败的,也就是说产品中有缺陷。但测试不能证明程序中没有缺陷。适当的测试可以减少测试对象中的隐藏缺陷。即使在测试中没有发现失效,也不能证明其没有缺陷。
考虑所有可能输入值和它们的组合,并结合所有不同的测试前置条件进行穷尽测试是不可能的。在实际测试过程中,对软件进行穷尽测试会产生天文数字的测试用例。所以说,每个测试都只是抽样测试。因此,必须根据风险和优先级,控制测试工作量。
在软件生命周期中,测试活动应当尽早开始,而且应当聚焦于定义的目标上。这样可以尽早发现缺陷。
通常情况下,大多数的缺陷只存在于测试对象的极小部分中。缺陷并不是平均而是集群分布的。因此,如果在一个地方发现了很多缺陷,那么通常在附近会有更多的缺陷。在测试中,应当机动灵活地应用这个原理。
如果同样的测试用例被一再重复地执行,会减少其有效性。先前没有发现的缺陷也不会被发现。因此,为了维持测试的有效性,战胜这种“抗性药”,应当对测试用例进行不断修改和更新。这样软件中未被测试过的部分或者先前没有被使用的输入组合就会重新执行,从而发现更多的缺陷。
测试必须与应用程序的运行环境和使用中固有的风险相适应。因此,没有两个系统可以以完全相同的方式进行测试。对于每个软件系统,测试出口准则等等应当根据它们使用的环境分别量体定制。安全关键系统与电子商务应用程序要求的测试是不同的。
找到失效、修正缺陷并不能保证整个系统可以满足用户的预期要求和需要。在开发过程中用户的早期介入和原型系统的使用就是为了避免问题的预防性措施。
程序或系统的测试需要专门的人员负责,除了单元测试,其他测试应该交给专业人员跟进。
设计测试用例时要考虑到合法输入和非法输入以及各种边界条件,特殊情况还要制造极端状态和意外状态(冒烟测试)。
正面指出停止测试的具体要求,即停止测试的标准可定义为查出某一预定数目的故障;
V模型
提供了对测试对象进行测试的推荐方法。
对于每种测试,都应提供测试说明,并解释其实施的原因。
制定测试策略时所考虑的主要事项有:将要使用的技术以及判断测试何时完成的标准。
下面列出了在进行每项测试时需考虑的事项,除此之外,测试还只应在安全的环境中使用已知的、有控制的数据库来执行。
注意:不实施某种测试,则应该用一句话加以说明,并陈述这样的理由。例如,“将不实施该测试。该测试本项目不适用”
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖
目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
原则:(1)一个模块中的所有独立路径至少被测试一次。
(2)所有逻辑值均需测试true和false两种情况。
(3)检査程序的内部数据结构,保证其结构的有效性。
(4)在取值的上、下边界及可操作范围内运行所有循环。
不通过执行程序而进行测试的技术。静态分析的关键功能是检查软件的表示和描述是否一致,有无冲突或者歧义。
当软件系统在模拟的或真实的环境中执行之前、之中和之后,对软件系统行为的分析。动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。
软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节、或与需求文档存在差异的功能实现等
2级:高 ,软件的主要功能错误或者造成软件崩溃,数据丢失的缺陷
4级:低 ,对软件的质量影响非常轻微的缺陷,多为建议性或者UI层级的问题
功能问题、设计缺陷、界面优化、性能问题、配置相关、安装部署、安全相关、标准规范、测试脚本、文档错误、兼容问题、用户体验、其它
也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试
对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方
缓存的力量是强大的,恰当的缓存设置可以大大的减少 HTTP请求
尽可能的将外部的脚本、样式进行合并,多个合为一个。另外, CSS、 Javascript、Image 都可以用相应的工具进行压缩,压缩后往往能省下不少空间。
使用 data: URL scheme的方式将图片嵌入到页面或 CSS中,如果不考虑资源管理上的问题的话,不失为一个好办法。如果是嵌入页面的话换来的是增大了页面的体积,而且无法利用浏览器缓存。使用在 CSS中的图片则更为理想一些
这条策略实际上并不一定能减少 HTTP请求数,但是却能在某些条件下或者页面刚加载时减少 HTTP请求数。
最简单可依赖的方法就是将脚本尽可能的往后挪,减少对并发下载的影响。
建议将执行时间较长的 inline脚本异步执行,异步的方式有很多种,例如使用 script元素的defer 属性(存在兼容性问题和其他一些问题,例如不能使用 document.write)、使用setTimeout ,此外,在HTML5中引入了 Web Workers的机制,恰恰可以解决此类问题。
随着 Javascript框架的流行,越来越多的站点也使用起了框架。不过,一个框架往往包括了很多的功能实现,这些功能并不是每一个页面都需要的,如果下载了不需要的脚本则算得上是一种资源浪费 -既浪费了带宽又浪费了执行花费的时间。目前的做法大概有两种,一种是为那些流量特别大的页面专门定制一个专用的 mini版框架,另一种则是 Lazy Load。
如果将 CSS放在其他地方比如 BODY中,则浏览器有可能还未下载和解析到 CSS就已经开始渲染页面了,这就导致页面由无 CSS状态跳转到 CSS状态,用户体验比较糟糕。除此之外,有些浏览器会在 CSS下载完成后才开始渲染页面,如果 CSS放在靠下的位置则会导致浏览器将渲染时间推迟。
在某些页面中可能存在这样一种需求,需要使用 script标签来异步的请求数据。
对于以目录形式访问的 HTTP链接,很多人都会忽略链接最后是否带 ’/',需要注意,这其中很可能隐藏了 301跳转,增加了多余请求。
这种情况主要是由于疏忽或页面由多个模块拼接而成,然后每个模块中请求了同样的资源时,会导致资源的重复请求
精简就是将Javascript或CSS中的空格和注释全去掉,
需要遍历 HTML Collection的时候,尽量将它转为数组后再访问,以提高性能。即使不转换为数组,也请尽可能少的访问它,例如在遍历的时候可以将 length属性、成员保存到局部变量后再使用局部变量。
DOM操作还需要考虑浏览器的 Reflow和Repaint ,因为这些都是需要消耗资源的
使用 with相当于增加了作用域链长度。而每次查找作用域链都是要消耗时间的,过长的作用域链会导致查找性能下降。
除非能肯定在 with代码中只访问 obj中的属性,否则慎用 with,替代的可以使用局部变量缓存需要访问的属性。
每次 eval 或 Function 构造函数作用于字符串表示的源代码时,脚本引擎都需要将源代码转换成可执行代码。这是很消耗资源的操作 —— 通常比简单的函数调用慢 100倍以上。
eval 函数效率特别低,由于事先无法知晓传给 eval 的字符串中的内容,eval在其上下文中解释要处理的代码,也就是说编译器无法优化上下文,因此只能有浏览器在运行时解释代码。这对性能影响很大。
Function 构造函数比 eval略好,因为使用此代码不会影响周围代码 ;但其速度仍很慢。
此外,使用 eval和 Function也不利于Javascript 压缩工具执行压缩。
这一点在循环中是尤其需要注意的问题。如果在循环中需要访问非本作用域下的变量时请在遍历之前用局部变量缓存该变量,并在遍历结束后再重写那个变量,这一点对全局变量尤其重要,因为全局变量处于作用域链的最顶端,访问时的查找次数是最多的。
Javascript中的数据访问包括直接量 (字符串、正则表达式 )、变量、对象属性以及数组,其中对直接量和局部变量的访问是最快的,对对象属性以及数组的访问需要更大的开销。
在 Javascript中使用"+" 号来拼接字符串效率是比较低的,因为每次运行都会开辟新的内存并生成新的字符串变量,然后将拼接结果赋值给新变量。与之相比更为高效的做法是使用数组的 join方法,即将需要拼接的字符串放在数组中最后调用其 join方法得到结果。不过由于使用数组也有一定的开销,因此当需要拼接的字符串较多的时候可以考虑用此方法。
CSS
Javascript
对于WEB应用来说,用户数据等都是存储在数据库中的。SQL注入就是攻击者通过构造一些恶意的SQL查询语句,让后台的数据库去解析,从而达到入侵目标网络,获取敏感信息的攻击手段
一旦数据库被入侵的话,黑客们可以搞得事情就多了,例如(拖库),就是把你整个数据库拿下来,这就意味着你所有的用户信息泄露。这些被获取到用户信息可以可能会被倒卖,二次利用
错误回显是通数据库的报错信息来获取一些数据库的基本信息。错误回显最基础的注入就是单引号【'】
布尔注入的思路主要是以下三点。1、提前闭合语句。2、利用OR和AND构造特殊情况,例如恒为正确。3、注释后面多余的SQL语句
盲注是不能通过直接显示的途径来获取数据库数据的方法。在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同)。
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。所以你如果想要使用union查询来进行注入,你首先要猜测后端查询语句中查询了多少列,哪些列可以回显给用户。
如果目标Web网站开启了错误显示,攻击者就可以通过反复调整发送的参数、查看页面打印的错误信息,推测出Web网站使用的数据库和开发语言等重要信息。
除非运维人员疏忽,否则大部分的Web运营网站应该都关闭了错误提示信息,此时攻击者一般会采用盲注的技巧来进行反复的尝试判断。 我们之前的查看会员详情页面的url地址为userinfo.php?username=plhwin,此时黑客分别访问userinfo.php?username=plhwin' AND 1=1-- hack和userinfo.php?username=plhwin' AND 1=2-- hack,如果前者访问能返回正常的信息而后者不能,就基本可以判断此网站存在SQL注入漏洞,因为后者的1=2这个表达式永远不成立,所以即使username传入了正确的参数也无法通过,由此可以推断这个页面存在SQL注入漏洞,并且可以通过username参数进行注入。
只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格式去检查,确保变量是我们预想的格式
对于无法确定固定格式的变量,一定要进行特殊符号过滤或转义处理。
绑定变量使用预编译语句是预防SQL注入的最佳方式,使用预编译的SQL语句语义不会发生改变,在SQL语句中,变量用问号?表示,黑客即使本事再大,也无法改变SQL语句的结构
XSS漏洞成因是由于动态网页的Web应用对用户提交请求参数未做充分的检查过滤,允许用户在提交的数据中掺入代码,然后未加编码地输出到第三方用户的浏览器,这些攻击者恶意提交代码会被受害用户的浏览器解释执行。
XSS攻击者通过构造URL的方式构造了一个有问题的页面;当其他人点击了此页面后,会发现页面出错,或者被暗中执行了某些js脚本,这时,攻击行为才真正生效。
构造URL攻击方式传播范围有限,被攻击者只要有基本的安全意识就可以避免,因此这种手段的危险性比较小。相比之下,通过发表内容构造的XSS的危害就大了很多。
在可以发表内容的论坛、讨论区、吧、博客、微博等网站上,用户发表的内容会保存起来,允许其他用户浏览。这些保存的内容显示在页面上的时候,如果没有经过正确的处理,也会把攻击者精心构造的内容显示出来,访问该内容的用户就此中招。如果该页面流传广泛,则影响会更加深远。
最暴力的方式是使用蠕虫——就是首先发一个有问题的文章,浏览者阅读时会被暗中执行恶意代码,发表一篇新的文章的,该文章也含有同样的恶意代码。这样有可能在最快时间内将攻击铺满整个网站。蠕虫式攻击将暗中偷偷摸摸的攻击行为变成了光明正大的攻城拔寨,极容易被发现和修复。
(1)破坏页面结构:用户输入的内容包含了html的标签,与前面的标签等闭合,导致页面的DIV结构发生变化,页面错乱。
(2)破坏显示内容:用户输入的内容包含了单引号或双引号,与前面的单引号或双引号匹配,导致后面的内容丢失,显示不出来。
(3)破坏JS:用户产生的内容直接输出到js片断中,但仅转义少数字符不能保证排除攻击,所以容易导致JS被破坏
这个绕过方式的出现是因为网站仅仅只过滤了<script>标签,而没有考虑标签中的大小写并不影响浏览器的解释所致
即我们输入一串原始值,网站将输入的原始值进行过滤,过滤后的值仍是一段可执行的代码。
有的时候,服务器往往会对代码中的关键字(如alert)进行过滤,这个时候我们可以尝试将关键字进行编码后再插入,不过直接显示编码是不能被浏览器执行的,我们可以用另一个语句eval()来实现。【eval()会将编码过的语句解码后再执行】
在实际运用中漏洞的利用可能不会这么直观,需要我们不断的尝试,甚至组合各种绕过方式来达到目的。
XSS攻击造成的危害之所以会发生,是因为用户的输入变成了可执行的代码,因此我们要对用户的输入进行HTML转义处理,将其中的尖括号,引号,单引号等特殊字符进行转义编码,例如“〈”转义后为“<;”,“>”转义后为“>;”,“'”转义后为“&;”,“"”转义后为“";”
DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。
DOS(Denial Service)拒绝服务式攻击,它是一种实现即简单很有效的针对服务器进行的攻 击方式,它的攻击目的就是让被攻击的主机和服务器拒绝用户正常访问,破坏系统正常运行 ,从而达到互联网用户无法连接被攻击的服务器和主机,造成服务器瘫痪。它的攻击过程,首先攻击者向被攻击的服务器发生大量带有虚假IP地址的服务请求,被攻击者在接收到请求 后返回确认信息,等待攻击者确认,此过程需要TCP的三次交换。由于攻击者发送的请求信 息是虚假的,所以被攻击服务器无法接受到信息确认,一直处于等待状态,而分配给这次请 求的资源却始终没有被释放。当被攻击者等待一定的时间后,连接会因超时而被断开,这是 攻击者再次发送新的虚假信息请求,就这样最终服务器资源被耗尽,直到瘫痪。
DDOS就是控制多台电脑对同一目标进行DOS攻击。DDOS是英文Distributed Denial of Service的缩写,意即"分布式拒绝服务",DDOS的中文名叫分布式拒绝服务攻击, 俗称洪水攻击。
DDOS(Distributed Denial Service)分布拒绝式攻击,它是在DOS基础上进行的大规模,大 范围的攻击模式,DOS只是单机和单机之间的攻击模式,而DDOS是利用一批受控制的僵尸主 机向一台服务器主机发起的攻击,其攻击的强度和造成的威胁要比DOS严重很多,更具破坏 性。首先DDOS攻击者要寻找僵尸主机,在互联网上寻找一些有后门漏洞的主机,然后入侵系 统安装控制程序,入侵的越多,控制的僵尸主机就越多,攻击源就更多,然后把入侵的主机 分配,一部分充当攻击的主要控制端,一部分充当攻击源,各负其责,在攻击者统一指挥下 对被攻击的服务器发起攻击,由于这个攻击模式是在幕后操作,所以很难被监控系统跟踪, 身份不容易被发现。
3、限制同时打开的SYN半连接数目,缩短SYN半连接的time out 时间,限制SYN/ICMP流量
5、认真检查网络设备和主机/服务器系统的日志。只要日志出现漏洞或是时间变更,那这台机器就可能遭到了攻击。
6、限制在防火墙外与网络文件共享。这样会给黑客截取系统文件的机会,主机的信息暴露给黑客,无疑是给了对方入侵的机会。
跨站伪造请求攻击 cross site request forgeries (CSRF)及预防
意为跨网站请求伪造,也有写为XSRF。攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请 求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法 权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻击者的目的。
CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。
服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。
(1).Cookie Hashing(所有表单都包含同一个伪随机值)
(3).One-Time Tokens(不同的表单包含一个不同的伪随机值)
所谓的网站安全证书 是通过在客户端浏览器和Web服务器之间建立一条SSL安全通道保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否真实可靠。
"加密",是一种限制对网络上传输数据的访问权的技术。原始数据(也称为明文,plaintext)被加密设备(硬件或软件)和密钥加密而产生的经过编码的数据称为密文(ciphertext)。将密文还原为原始明文的过程称为解密,它是加密的反向处理,但解密者必须利用相同类型的加密设备和密钥对密文进行解密。
①链路加密:通常把网络层以下的加密叫链路加密,主要用于保护通信节点间传输的数据,加解密由置于线路上的密码设备实现。根据传递的数据的同步方式又可分为同步通信加密和异步通信加密两种,同步通信加密又包含字节同步通信加密和位同步通信加密。
②节点加密:是对链路加密的改进。在协议传输层上进行加密,主要是对源节点和目标节点之间传输数据进行加密保护,与链路加密类似.只是加密算法要结合在依附于节点的加密模件中,克服了链路加密在节点处易遭非法存取的缺点。
③端对端加密:网络层以上的加密称为端对端加密。是面向网络层主体。对应用层的数据信息进行加密,易于用软件实现,且成本低,但密钥管理问题困难,主要适合大型网络系统中信息在多个发方和收方之间传输的情况。
2. 私用密钥加密技术:对称式加密(Symmetric Key Encryption):对称式加密方式对加密和解密使用相同的密钥。通常,这种加密方式在应用中难以实施,因为用同一种安全方式共享密钥很难。如:RC4、RC2、DES 和 AES 系列加密算法。
3. 公开密钥加密技术:非对称密钥加密(Asymmetric Key Encryption):非对称密钥加密使用一组公共/私人密钥系统,加密时使用一种密钥,解密时使用另一种密钥。公共密钥可以广泛的共享和透露。当需要用加密方式向服务器外部传送数据时,这种加密方式更方便。如: RSA
4. 数字证书。(Certificate):数字证书是一种非对称密钥加密,但是,一个组织可以使用证书并通过数字签名将一组公钥和私钥与其拥有者相关联。
1、 对称加密:对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码)。因此,通信双方都必须获得这把钥匙,并保持钥匙的秘密。
2、非对称加密:非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
B)分组长度太大,为保证安全性,n 至少也要 600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个
当n=p×q,p与q是两个大质数。只知道n的值,想要计算p和q,这是一个世界性的极为困难的数学难题。RSA的基础就是基于的n的两个质数分解难题。
Alice选择两个大质数p和q,求得n=p×q。计算φ(n)=(p−1)×(q−1),接下来,Alice选择一个与φ(n)互质的数e,并计算e−1在模为φ(n)下的值,将计算出的值记为s。我们知道,e与φ(n)互质,所以一定存在e−1, 这一步,service 就算出了公钥和私钥,其中,公钥为(e,n),私钥为(s,n)
接下来,Bob可以在非安全信道请求Alice获得公钥。Evl通过中间攻击,只能获得(e,n),以及密文D。假定Bob需要发送的内容为m,计算D=me(modn),然后把D发送给Alice
Alice收到D之后,计算me(e−1)(modn)=me×e−1(modn)≡m(modn).
其中,在不安全信道中传输的是n和e。然而,p和q只有Alice才知道,即便Eval获得了n,基于质数分解难题,他无法算出p和q,也就无法算出私钥s来揭秘被加密的消息。 且,m不能是大于n的数,当m大于n时可以拆分之后分段加密。
1.Safari浏览器:Safari,苹果计算机的操作系统Mac OS中浏览器,2003年,用来取代之前的Internet Explorer for Mac
2.Chrome:Chrome的目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。
Opera采用的内核:该内核在2003年的Opera7中首次被使用, 一直到2013年2月,Opera浏览器宣布改为Webkit内核, 其实也是件好事,因为可以少做一点兼容性测试,省一些工夫
2. MaxThon 傲游浏览器(傲游1.x、2.x为IE内核,3.x为IE与Webkit双核)是一款多功能、个性化多标签浏览器。
3.腾讯TT浏览器是一款集多线程、黑白名单、智能屏蔽、鼠标手势等功能于一体的多页面浏览器,具有快速、稳定、安全的特点。
4.世界之窗浏览器是一款快速、安全、功能细节丰富且强大的绿色多窗口浏览器,由凤凰工作室(现变身为“北京超卓科技有限公司”)开发。
2.Mozilla,Mozilla名字来自Mosaic和Godzilla(怪兽哥斯拉)两个词的结合,意为“Mosaic终结者”。Mosaic是互联网历史上第一个获普遍使用的网页浏览器。
301代表永久性转移(Permanently Moved),301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。
302代表暂时性转移(Temporarily Moved )
-
- 用户体验
- 访问网站的用户操作行为是怎么样的?页面的访问频率占比如何?因为测试的精力和侧重点也要根据这个数据而定
- 网站部署时是否会影响到用户使用,如何避免?
- 不要直接显示不友好的错误提示,是否有友好的提示信息?
- web应用不能泄漏用户的隐私信息
- 页面是在当前页打开还是另开一个tab?
- 页面元素的布局如何影响到用户体验的?
- ORACLE/SQL
-
- 使用工具
- HttpWatch,基于IE的网络数据分析工具,包括网页摘要,Cookies管理,缓存管理,消息头发送/接受,字符查询,POST 数据和目录管理功能等
- FireBug,用途同上,基于firefox的
- Yslow,前端网站性能工具,显示测试结果的分析,分为等级、组件、统计信息
- Fiddler,强大的web前端调试工具,它能记录/拦截所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,也可用于安全测试
- Chrome扩展程序:浏览器兼容性检测工具,分析网站的兼容性情况
- ShowIP:显示访问网站的IP,web测试中你是否经常因为访问的网站IP不对,而被开发人员BS呢?它能帮助到你。
- 网络限速等工具:netlimiter
- 使用工具
注:内容来自多个地方汇总,具体来源未备注
内容原版为xmind脑图:https://download.csdn.net/download/qq_34897661/10819415