web测试知识详解

测试 同时被 2 个专栏收录
6 篇文章 4 订阅
1 篇文章 0 订阅

web测试

web测试

1. 分类及测试要点

1.1. 功能测试

1.1.1. 测试方面

1.1.2. 测试点

1.2. 性能测试

1.2.1. 工具

1.2.2. 分类

1.3. 安全性测试

1.3.1. 类型

1.3.2. 工具

1.4. 单元测试

1.4.1. unittest

1.4.2. 断言方法

1.4.3. 单元测试用例的设计

1.4.4. 用例执行顺序的控制

1.4.5. 测试脚本分析

1.5. 兼容性测试

1.5.1. 浏览器兼容性

1.5.2. 系统兼容

1.5.3. 显示分辨率

1.5.4. 插件兼容

1.6. 其他测试

1.6.1. 接口测试

1.6.2. 易用性测试等

2. web自动化

2.1. 类型

2.1.1. UI自动化

2.1.2. 接口自动化

2.2. 自动化框架实践

2.2.1. 自动化框架

2.2.2. 自动化项目实施

2.2.3. GIT源代码管理

2.2.4. 持续集成(CI)

2.3. 自动化测试模型

2.3.1. 自动化测试模型

2.3.2. 模块驱动测试

2.3.3. 关键字驱动测试

2.3.4. 数据驱动测试与实例

2.3.5. 模块化测试模型实例

2.4. 自动化测试深度开展

2.4.1. html测试报告

2.4.2. 测试报告的制定和维护

2.4.3. 邮件的推送

2.5. Page Object

2.6. Selenium Grid2

2.6.1. Selenium Server

2.6.2. Selenium Grid

2.6.3. Remote

2.6.4. WebDriver驱动

2.7. 自动化测试基础

2.7.1. 分层的自动化测试

2.7.2. 自动化工具对比

2.7.3. selenium介绍

2.8. 自动化环境的部署

2.8.1. python的环境部署

2.8.2. selenium工具集

2.8.3. selenium环境搭建

2.8.4. 浏览器驱动的部署

2.8.5. webdriver的入门

2.9. 定位元素

2.9.1. 定位元素(id、name等)

2.9.2. 快速定位元素插件

2.9.3. 浏览器操作

2.9.4. 鼠标、键盘事件

2.9.5. 验证信息的获取

2.9.6. 元素的等待

2.9.7. 表单、窗口切换

2.9.8. cookies的操作

2.9.9. 验证码的处理

2.9.10. 截图

3. 需要掌握的知识

3.1. 理解web

3.1.1. 1、网络基础知识

3.1.2. 2、web系统基础

3.1.3. 3、web核心技术

3.2. 网络协议

3.2.1. 网络协议模型

3.2.2. 2、TCP/IP协议

3.2.3. 3、HTTP/HTTPS协议

3.3. web开发技术

3.3.1. 客户端开发技术

3.3.2. 服务器端开发技术

3.4. web测试技术

3.4.1. 软件测试原理

3.4.2. 测试技术

3.4.3. web性能

3.4.4. 安全

3.5. 服务器及部署知识

3.5.1. apache

3.5.2. tomcat

3.5.3. ant

3.5.4. git

3.5.5. jenkins

3.5.6. maven等工具

3.6. 浏览器机制

3.6.1. 理解浏览器在处理javascript及渲染CSS的机制

3.6.2. 了解IE与其他浏览器的差异

3.6.3. 为什么兼容性测试时需要特别关注IE

3.6.4. 浏览器在加载javascript,CSS有时在前面有时在后面,为什么?

3.6.5. 加载顺序会对视觉和使用上有什么影响呢?

3.6.6. 常见内核和对应的浏览器

3.7. web架构

3.7.1. 软件出错时怎么个报警法?是否有详尽的log记录?

3.7.2. 服务器缓存机制如何?

3.7.3. 数据库如何主从同步,如何备份的?

3.7.4. 集群如何处理session的?

3.8. 其他需要掌握技能

3.8.1. Linux

3.8.2. 脚本语言等

3.9. SEO

3.9.1. XML sitemap的意义,可以让搜索引擎了解你的网站地图

3.9.2. 了解 robots.txt 和搜索引擎爬虫是如何工作的

3.9.3. 友好的搜索引擎URL

3.9.4. 重定向301和302

3.9.5. 网页Meta信息中title,description等的重要性

3.10. 用户体验

3.10.1. 访问网站的用户操作行为是怎么样的?页面的访问频率占比如何?因为测试的精力和侧重点也要根据这个数据而定

3.10.2. 网站部署时是否会影响到用户使用,如何避免?

3.10.3. 不要直接显示不友好的错误提示,是否有友好的提示信息?

3.10.4. web应用不能泄漏用户的隐私信息

3.10.5. 页面是在当前页打开还是另开一个tab?

3.10.6. 页面元素的布局如何影响到用户体验的?

3.11. ORACLE/SQL

3.11.1. 基础语句

3.11.2. 限制性查询和数据的排序

3.11.3. 常用的SQL*PLUS语句

3.11.4. 单行函数

3.11.5. NULL值的处理、逻辑操作和函数嵌套

3.11.6. 分组函数

3.11.7. 多表查询

3.11.8. 子查询

3.12. 使用工具

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呢?它能帮助到你。

3.12.7. 网络限速等工具:netlimiter

 

 

  1. 分类及测试要点
    1. 功能测试
      1. 测试方面

1、链接测试

1)测试所有链接是否按指示的那样确实链接到了该链接的页面

2)测试所链接的页面是否存在

3)测试web应用系统上没有孤立的页面

2、表单测试

表单一般指在界面进行数据提交操作的,包括新增和修改数据

1)输入框测试

——长度、数据类型、必填、重复、空格、sql注入以及一些业务相关约束

2)下拉框测试

——默认值、数据完整性/正确性、第一个/最后一个/中间一个选取、手动输入值模糊匹配、联动选择;业务常见选取的操作

3)图片、视频、excel、txt等文件上传测试

——大小、尺寸、格式、数量、文件内容规则验证

4)表单提交按钮测试

——是否支持回车/单击、快速多次点击是否重复提交表单、网络中断(弱网)提交、提交之后是否有提示、提交后内容是否加密、提交是否做权限校验控制、多人针对表单同时操作的场景测试

3、搜索测试

搜索条件一般为2种情况:输入框、下拉框

1)任单个条件查询

模糊搜索、超长搜索、不存在与之匹配的条件、为空

2)任两个组合查询

确保任两个组合查询的正确性,验证两个组合的所有情况。

3)三个组合查询

不需要测试三个组合的全部级组合。因为前面针对所有单个条件的搜索、两个组合的所有组合进行测试了,那么在这里选择2-3组三种组合进行测试即可。

4)全条件组合查询

确保最大组合的正确性。

5)默认条件查询

补充默认条件查询的用例

6)根据需求或者业务规则选取重点条件组合查询

时间输入框

1)开始时间<=结束时间,测试一个小时、跨时、当天、跨天、跨月、跨年的数据

2)开始时间大于/小于当前时间,若是针对出生年月搜索,验证大于的情况;若是定时任务时间搜索验证小于的情况

3)只输入开始时间/结束时间

4)开始时间、结束时间都不输入

5)结束时间早于开始时间

6)手动输入时间,注意时间格式验证

4、删除测试

1)没选择数据,点击删除

—是否有友好提示

2)选择一条数据,点击删除

—是否提示删除确认信息,需二次确认

3)删除一条数据后,点击添加

—是否可以添加相同的数据

3)连续删除多个产品,选择批量删除

—是否支持

4)选择全选,点击删除

—注意是否把所有的数据删除

5)删除一个有关联性的数据,(如删除QQ分组,组下好友会有提示)

6)所有删除数据操作,要注意相应查询页面及其关联界面的数据是否及时更新

5、cookies、session测试

cookies/session通常用来存储用户信息,Cookie通过在客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份

1)打开WEB系统后,在浏览器默认存储cookies的目录下看此cookies目录是否存在。

2)已知cookies的保存时间,测试时间范围之内和之外的cookies文件是否正常

3)将浏览器下的所有cookies文件全部删除。再次登录web系统,会怎么处理

6、数据库测试

在web应用技术中,数据库就是一个“仓库”,我们在进行功能测试的任何操作都可以归溯到是对于数据库的增删改查

1、数据库脚本执行—数据库表添加、修改是否正常

2、页面提交表单、修改、查询、删除 —数据库表信息是否正常

      1. 测试点

页面部分

(1)页面清单是否完整(是否已经将所需要的页面全部列出来了)

(2)页面是否显示(在不同分辨率下页面是否存在,在不同浏览器版本中页面是否显示)

(3)页面在窗口中的显示是否正确,美观(在调整浏览器窗口大小时,屏幕刷新是否正确)

(4)页面特殊效果(如特殊字体效果,动画效果是否显示)

(5)页面特殊效果显示是否正确

页面元素部分

(1)页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,如按钮,单选框,复选框,列表框,输入框等)

(2)元素是否显示(元素是否存在)

(3)元素是否显示正确(针对文字,图形,签章等)

(4)元素的外形,摆放位置是否合理(如按钮,单选框,复选框,列表框,输入框等)

(5)元素基本功能是否实现(如文字特效,动画特效,按钮,超链接等)

(6)元素的容错性列表(如输入框,时间列表或日历)

(7)元素的容错性是否正确或存在

功能部分

(1)数据初始化是否执行

(2)数据初始化是否正确

(3)数据处理功能是否执行或正确

(4)数据保存是否执行或正确

(5)是否对其他功能有影响

(6)如果影响其他功能,系统能否做出正确的反应

(7)对模块的具体功能进行测试时可以列出功能模块所有的功能,进行排列组合,测试所有情况

(8)查询功能分2种--验证操作结果,打开页面时自动显示结果,则不需要特别强调;需要手工操作进行查询,则每次在其他功能完成后进行

提示信息

(1)成功,失败提示

(2)操作结果失败

(3)确认提示

(4)危险操作,重要操作提示

(5)返回页面提示后显示的页面

容错性

(1)为空,非空

(2)唯一性

(3)字长,格式

(4)数字,邮编编码,电话,电子邮件,ID号,密码

(5)日期,时间

(6)特殊字符(对于数据库),英文单词,单双引号

权限部分

(1)功能:指定用户可以使用哪些功能,不能使用哪些功能

(2)数据:指定用户可以处理哪些数据,不可以处理哪些数据

(3)操作:在逻辑关系上,操作前后顺序,数据处理情况

(4)权限变化

键盘操作

(1)Tab键

(2)上下方向键

(3)Enter键

(4)系统设定快捷键

    1. 性能测试
      1. 工具

Loadrunner

Jmeter等

      1. 分类

前端性能

web优化的黄金法则

80%的最终用户响应时间花在前端程序上,而其大部分时间则花在各种页面元素,如图像、样式表、脚本和Flash等,的下载上。减少页面元素将会减少HTTP请求次数。这是快速显示页面的关键所在

web前端性能关注点

加载时间

a. Time to First Impression

表示从用户在浏览器键入url按下回车键一刻开始到页面开始有反应(用户可以在页面中看见一点点内容)为止。经常能感觉到的一个信号就是网页开始显示title。

b.Time to onLoad Event

表示从页面开始显示内容,到浏览器开始触发OnLoad函数这一时间段。只有当初始的文本和所引用的对象加载完成,浏览器才开始触发OnLoad函数

c.Time to Fully Loaded

表示从上一时间段末到整个网页完全加载完成(所有OnLoad函数以及相关的动态资源加载完成)。在网页中含有timeout或定时刷新之类处理时较为难判断结束点。

资源情况

网页由初始的html文本中嵌入图片以及通过XHR或者修改dom树动态加载的内容组成,css负责样式,js负责行为。所以当网页资源过多为了下载资源,客户端和服务器的网络来回就更多。

a. Total Number of Requests

  包括html网页请求,css、js资源下载及其它网络请求。优化的目标之一是要尽量减少请求数。

b. Total Number of HTTP 300s/400s/500s

  表示返回状态为300(重定向)、400(客户端错误)、500(服务器端错误)的http请求。尽量避免这些请求,以提高页面load的时间。造成这些状态的原因经常是服务器的实施、配置和部署问题。

c. Total Size of Web Site

  构成网页元素总的大小。图片或者js库的增加都会对下载时间造成重要的影响。

d. Total Size of Images/CSS/JS

  image、css、js在网页元素大小中占主要比例。

e. Total Number of XHR(XMLHttpRequest) Requests

 通过js异步从服务器端获得数据的请求数。一些js框架提供了跟服务器端的更新机器,就是XHR请求。通过配置可以减少XHR请求的数目

网络连接

浏览器底层的网络连接对资源的下载速度有很大影响。资源的下载过程分为很多阶段

a. DNS Time

  dns 查询的时间。网页请求会产生一次寻找该网页资源所在主机的dns查询。在同个域名进行网页切换不会造成新的dns查询。

b. Connect Time

  指浏览器和服务器之间建立tcp/ip连接的时间,对于ssl连接包括握手的时间。网络连接过慢、使用ssl、使用短连接而非常连接都是造成connect time较多的原因。

c. Server Time

  指收到请求后服务器逻辑处理的时间

d. Transfer Time

  这一指标与浏览器和服务器之间的连接速度相一致,通过减小传输内容或使用cdn来降低Transfer Time。

e. Wait Time

  等待时间和同一个域中服务资源的数量直接相关。每个域的浏览器的物理网络的限制,导致资源等待可用的连接。减少资源的数量,或将资源散布在不同的域,能将这一时间降低。平均等待时间的大小更能反映等待时间是否需要注意。

f. Number of Domains / Single Resource Domains

  部署网站资源的域主机数量是很重要的,因为它影响的DNS,连接和等待时间。

  专门用户资源下载的域是必要的,他将直接减少等待时间。应避免单一的资源域,否则你将为dns查询以及资源下载付出昂贵的代价

服务器性能

常见指标

时间指标

服务器响应时间(Server Response Time)

客户端发送一个HTTP请求至收到HTTP响应头信息消耗的时间。

页面响应时间(Page Response Time)

客户端从Web服务器请求一个完整的页面(包括内嵌对象)所消耗的时间。

往返时间(Round Trip Time)

建立TCP连接时,从客户端发送SYN请求到服务器返回SYN/ACK的时间。

TCP连接建立时间

客户端发出访问请求后,与Web服务器成功建立TCP连接所需的时间。

系统容量指标

并发用户数(Concurrent Users)

Web服务器能够同时正确及时地服务的用户数。

每秒用户数(User Per Second)

单位时间(1s)内成功连接到Web服务系统的新用户的个数。

并发连接数(Simultaneous Connections)

Web服务器能够与客户端建立并保持同时打开的TCP连接数,最大并发连接数反映了Web服务器所对其客户多个连接的处理能力。

连接速率(Connect ion Rate)

客户端与Web服务器在单位时间(1s)新建立的TCP新建连接的个数。

事务处理次数(Cumulative Transactions)

Web服务器处理HTTP Transaction的累计总数定义为事务处理次数。

事务处理速率(Transactions Per second)

在单位时间(1s)内成功响应HTTP Transaction的个数。

资源利用率指标

资源利用率是指Web服务器不同资源(如服务器的CPU,内存、磁盘、网络带宽等)的使用程度,它常常用占资源的最大可用量的百分比来衡量。Web服务器资源利用率指标包括CPU占用率、内存占用率、磁盘占用率、可用网络带宽。

测试关注点

a. web服务的连接速度如何?

b. 每秒的点击数如何?

c. Web服务能允许多少个用户同时在线?

d. 如果超过了这个数量,会出现什么现象?

e. Web服务能否处理大量用户对同一个页面的请求?

f. 如果web服务崩溃,是否会自动恢复?

g. 系统能否同一时间响应大量用户的请求?

h. 打压机的系统负载状态

测试方法

并发性能测试

负载测试

确定在各种工作负载下系统的性能,通过在被测系统上不断增加压力,直到性能指标超过预定指标或某种资源使用已经达到饱和状态。主要目的:寻找Web服务器的处理能力极限,包括支持的最大用户、业务等处理能力的约束;了解Web系统性能容量;配合Web系统进行调优。测试角度可以是并发用户数、业务量、数据量等不同方面的负载。

压力测试

通过确定一个系统的瓶颈或者不能再接收的极限点,来获得系统所能提供的最大服务级别的测试。压力测试方法测试Web服务器在资源处于饱和或超负荷的情况下(例如CPU、内存等在饱和状态下),系统能够处理的HTTP请求或用户会话的能力以及系统是否会出现错误。其主要意义是通过测试、调优保证系统即使在用户的极端压力下也不会出错甚至或者导致系统崩溃。因此可以认为是一种在极端压力下的稳定性测试。

疲劳强度测试

    疲劳强度测试也称持久度测试(durability),可以被当作是一个长期的负载或压力测试,它是选择Web服务器稳定运行情况下能够支持的最大并发用户数,持续执行一段时间业务,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。疲劳强度测试可以采用工具自动化生成的方式进行测试,也可以手工编写程序测试,其中后者占的比例较大。

    一般情况下以Web服务器能够正常稳定响应请求的最大并发用户数进行一定时间的疲劳测试,获取交易执行指标数据和系统资源监控数据。如出现错误导致测试不能成功执行,则及时调整测试指标,例如降低用户数、缩短测试周期等。还有一种情况的疲劳测试是对当前系统性能的评估,用系统正常业务情况下并发用户数为基础,进行一定时间的疲劳测试。

    1. 安全性测试
      1. 类型

1.跨站脚本(XSS)

XSS又叫CSS(CROSS SET SCRIPT),跨站脚本攻击。它指的是恶意攻击者往WEB页面里插入恶意的html代码,当用户浏览该页面时,嵌入其中的html代码会被执行,从而达到恶意用户的特殊目的;(钓鱼、盗取cookie、操纵受害者的浏览器、蠕虫攻击)

2.反射型跨站(Reflected XSS)

服务器端获取http请求中的参数,未经过滤直接输出到客户端。如果这些参数是脚本,它将在客户端执行(钓鱼常见)。

3.存储型跨站(Stored XSS)

用户输入的数据存在服务器端(一般存在数据库中),其他用户访问某个页面时,这些数据未经过滤直接输出。这些数据可能是恶意的脚本,对其他用户造成危害。(挂马常见)

在允许上传文件的应用中,攻击者上传一个包含恶意代码的html或者txt文件,用户浏览这些文件执行恶意代码;

一般的应用中上传图片最普遍,如果图片中包含恶意代码的html或者txt文件,,低版的IE直接请求这个图片时,将忽略Content-Type执行图片中的代码。

4.DOM跨站(DOM-Based XSS)

攻击者构造一个包含恶意Javascript的URL,然后引诱用户请求这个URL。服务器收到请求后没有返回恶意的Javascript。

浏览器在处理URL中的数据时,执行恶意代码。

5.跨站请求伪造(CSRF)

强迫受害者的浏览器向一个易受攻击的Web应用程序发送请求,最后达到攻击者所需要的操作行为。

恶意请求会带上浏览器的Cookie。受攻击的Web应用信任浏览器的Cookie。

6.SQL注入

用户输入的数据未经验证就用来构造SQL

查询语句,查询数据库中的敏感内容,绕过认证添加、删除、修改数据、拒绝服务。

7.XML注入

和SQL注入原理一样,XML是存储数据的地方,如果在查询或修改时,如果没有做转义,直接输入或输出数据,都将导致XML注入漏洞。攻击者可以修改XML数据格式,增加新的XML节点,对数据处理流程产生影响。

8.URL跳转

Web应用程序接收到用户提交的URL参数后,没有对参数做”可信任URL”的验证,就向用户浏览器返回跳转到该URL的指令。(钓鱼攻击)

9.文件系统跨越

文件系统中../代表上级目录,通过一个或多个../跨越目录限制。

10.系统命令

用户提交的参数用于执行系统命令的参数。

使用”|”或”;”执行多条命令。

11.文件上传

Web应用程序在处理用户上传的文件时,没有判断文件的扩展名是否在允许的范围内,或者没检测文件内容的合法性,就把文件保存在服务器上,甚至上传脚本木马到web服务器上,直接控制web服务器。(未限制扩展名、未检查文件内容、病毒文件)

12.任意文件下载

下载附件等功能

Apache虚拟目录指向

Java/PHP读取文件

下载数据库配置文件等

目录浏览

13.权限控制

有没有权限

有些系统不需要权限控制

有没有设置权限

有了强大的权限系统,但是没有使用

有没有偷工减料权限

URL级别

菜单级别

14.访问控制

  水平权限

Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或判断数据所属人时,从用户提交的request参数(用户可控数据)中,获取了数据所属人id,导致恶意攻击者可以通过变换数据ID,或变换所属人id,修改不属于自己的数据。

  垂直权限

  由于web应用程序没有做权限控制,或仅仅在菜单上做了权限控制,导致的恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升目的。

15.Session Expires

会话过期

浏览器过期

服务器30分钟无动作过期

服务器24小时强制过期

保持会话

      1. 工具

端口扫描:NMAP工具

appscan商用扫描多种漏洞

ZAP开源扫描工具

操作系统漏洞扫描工具:Nessus

协议健壮性测试:Codenomicon、Peach

web漏洞扫描:Appscan、Burpsuite(可抓取、拦截web报文并进行修改)

数据库漏洞扫描:Nessus、NGS

fiddler工具:可抓取web报文,并可构造报文,进行web接口测试

    1. 单元测试
      1. unittest
      2. 断言方法
      3. 单元测试用例的设计
      4. 用例执行顺序的控制
      5. 测试脚本分析
    2. 兼容性测试
      1. 浏览器兼容性

主流浏览器:IE,FireFox、Chrome、Safari等,浏览器的差异主要体现在javaScript、ActiveX和HTML解码方法处理不同,因此需要在web系统测试时注意,尤其是通过某个控件跳转浏览器时更需要注意。

      1. 系统兼容

主要的操作系统  window XP ,windows 7、windows 8,mac系统。在测试过程中需要关注被测试对象在不同操作系统上的表现、尤其是有数据交互时。

      1. 显示分辨率

不同的显示分辨率可能会导致web页面变形,严重时会导致功能无法使用,因此需要测试在不同分辨率下的系统表现。常见的分辨率:1280X1024、1024X768、800X600等,即使在某些分辨率下不能工作,也需要给出提示信息。

      1. 插件兼容

在web系统应用了一些控件,如文本编辑器,文件上传下载,这些控件也需要考虑在不同的操作系统,不同的分辨率下的应用表现。

    1. 其他测试
      1. 接口测试

分类

服务器接口

测试浏览器与服务器的接口。用户输入的数据是输入到的前端页面上,怎样把这些数据传递的后台的呢?通过http协议的get与post请求来实现前后端的数据传递。这也可认为是接口测试。

外部接口

第三方接口,这个很典型的例子就是第三方支付,比如在我们应用中在充流量时,交话费时,都会调用第三方支付接口。

测试要点

请求是否正确,默认请求成功是200,如果请求错误也能返回404、500等。

检查返回数据的正确性与格式;json是一种非常常见的格式。

接口的安全性,一般web都不会暴露在网上任意被调用,需要做一些限制,比如鉴权或认证。

接口的性能,这直接影响用户的使用体验。

      1. 易用性测试等
  1. web自动化
    1. 类型
      1. UI自动化
      2. 接口自动化
    2. 自动化框架实践
      1. 自动化框架

需求分析、概要设计

框架的详细设计与实现:页面管理

公共模块

用例仓库

用例控制器

用例执行

      1. 自动化项目实施

测试用例设计与实现

脚本的设计

测试的实施

      1. GIT源代码管理

GIT项目的创建

GIT代码的提交

      1. 持续集成(CI)

GIT代码的提交

持续集成的实施

    1. 自动化测试模型
      1. 自动化测试模型
      2. 模块驱动测试
      3. 关键字驱动测试
      4. 数据驱动测试与实例
      5. 模块化测试模型实例
    2. 自动化测试深度开展
      1. html测试报告
      2. 测试报告的制定和维护
      3. 邮件的推送
    3. Page Object
    4. Selenium Grid2
      1. Selenium Server
      2. Selenium Grid
      3. Remote
      4. WebDriver驱动
    5. 自动化测试基础
      1. 分层的自动化测试
      2. 自动化工具对比
      3. selenium介绍
    6. 自动化环境的部署
      1. python的环境部署
      2. selenium工具集
      3. selenium环境搭建
      4. 浏览器驱动的部署
      5. webdriver的入门
    7. 定位元素
      1. 定位元素(id、name等)

driver.find_element_by_id

driver.find_element_by_name

driver.find_element_by_class

driver.find_element_by_tag_name

driver.find_element_by_xpath

driver.find_element_by_css

driver.find_element_by_link_text

driver.find_element_by_partial_text

      1. 快速定位元素插件
      2. 浏览器操作

driver.get(url)

driver.maxmize_window()

driver.implicitly_wait(times)

driver.quit() #关闭所有窗口且安全关闭session

driver.close() #只关闭当前窗口

driver.forward()

driver.back()

driver.refresh()

driver.switch_to.frame(type)

driver.switch_to.default_content()

driver.switch_to.window(name)#切换窗口

driver.current_window_handle

driver.window_handles

driver.title

driver.current_url

driver.page_source #获取页面html源代码

driver.set_window_size(width,high)

driver.get_window_size()

driver.get_window_position()

      1. 鼠标、键盘事件

driver.find_element_by_xpah(findType).clear()

driver.find_element_by_xath(findType).click()

driver.find_element_by_xath(findType).send_keys()

context_click() #鼠标右击

double_click() #鼠标双击

drag_and_drop() #拖拽---从一个地方拖到另一个地方

move_to_element() #鼠标悬停

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 = webdriver.Firefox()

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)

      1. 验证信息的获取

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标签的上传文件可以使用此方法

      1. 元素的等待

显示等待:WebDriverWait(driver, timeout,poll_frequency,ignored_exceptions=None).until(method,message)  

隐式等待:implicitly_wait(5)

强制等待:time.sleep(4)

      1. 表单、窗口切换

switch_to_frame()默认直接取表单的id或者name属性来切换

driver.current_window_handle    #获取当前窗口句柄
driver.window_handles            #返回所有窗口句柄到当前会话
driver.switch_to_window()       #进入窗口,用于切换不同窗口

      1. cookies的操作

driver.switch_to.alert.accept()

driver.switch_to.alert.dismiss()

driver.get_cookies()

driver.add_cookie()

driver.execute_script(js)

driver.delete_cookie()

      1. 验证码的处理
      2. 截图

driver.get_screenshot_as_file(filename) #截图当前窗口

driver.get_screenshot_as_base64()

  1. 需要掌握的知识
    1. 理解web
      1. 1、网络基础知识

IP地址

分类的IP地址

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为可用来分配。

D类:E类地址网络号字段为4字节,前4位固定为1110

E类:E类地址网络号字段为5字节,前5位固定为11110

划分子网

 IP地址::={<网络号>,<子网号>,<主机号>}

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. 2、web系统基础

网络体系结构

B/S与C/S的区别

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等信息流向的变化,更象交易中心。

web特点

      1. 3、web核心技术

工作原理

客户端技术

服务器技术

    1. 网络协议
      1. 网络协议模型

OSI分层(7层)

物理层:设备间接收或发送比特流;说明电压、线速和线缆等。

常见:中继器、网线、集线器、HUB等

协议:RJ45、CLOCK、IEEE802.3等

数据链路层:将比特组合成字节,进而组合成帧;用MAC地址访问介质;错误可以被发现但不能被纠正

常见:网卡、网桥、二层交换机等

协议:PPP、FR、HDLC、VLAN、MAC等

网络层:负责数据包从源到宿的传递和网际互连

常见:路由器、多层交换机、防火墙等

协议:IP、ICMP、ARP、PARP、OSPF、IPX、RIP、IGRP等

运输层:可靠或不可靠数据传输;数据重传前的错误纠正。

常见:进程、端口(socket)

协议:TCP、UDP、SPX

会话层:保证不同应用程序的数据独立;建立、管理和终止会话。

常见:服务器验证用户登录、断点续传

协议:NFS、SQL、NetBIOS、RPC

表示层:数据表示;加密与解密、数据的压缩与解压缩、图像编码与解码等特殊处理过程

常见:URL加密、口令加密、图片编解码等

协议:JPEG、MPEG、ASCII

应用层:用户接口

协议:FTP、DNS、Telnet、SNMP、SMTP、HTTP、WWW、NFS

TCP/IP分层(4层)

物理层

数据链路层

网络层

运输层

应用层

五层协议(5层)

应用层:通过应用进程间的交互来完成特定网络应用

数据:报文

协议:HTTP, SMTP(邮件), FTP(文件传送)

运输层:向两个主机进程之间的通信提供通用的数据传输服务。

数据:TCP:报文段,UDP:用户数据报

协议:TCP, UDP

网络层:为分组交换网上的不同主机提供通信服务

数据:包或IP数据报

协议:IP

数据链路层:

数据:帧

物理层:

数据:比特

      1. 2、TCP/IP协议

特点

面向连接的运输层协议。

点对点(一对一)通信。

可靠交付。

全双工通信(TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据)。

面向字节流。

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,并且由于连接已经建立所以现在可以携带应用层数据。

 

TCP四次挥手

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,防止服务端没有接收到确认报文,重传报文。并且使连接产生的报文都消失。

 

TCP拥塞控制

拥塞控制和流量控制的区别

流量控制针对的是点对点之间的(发送方和接收方)之间的速度匹配服务,因为接收方的应用程序读取的速度不一定很迅速,而接收方的缓存是有限的,就需要避免发送的速度过快而导致的问题。拥塞控制是由于网络中的路由和链路传输速度限制,要避免网络的过载和进行的控制

拥塞控制算法

1.慢启动

慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。一般一开始为1个MSS,之后翻倍这样来增加,呈指数增长。其中1、慢启动过程有一个阈值ssthresh,一旦到达阈值就进入拥塞避免模式。这是第一种离开结束慢启动的方式2、如果收到了一个丢包提示,就将cwnd设为1并且重新开始慢启动过程,这时要把阈值ssthresh设为当前cwnd值的一半。3、如果收到了三次冗余的ACK,就执行一次快速重传并且进入快速恢复状态,这是最后一种结束慢启动的过程。

2.拥塞避免

进入拥塞避免说明cwnd值大约是上一次遇到拥塞是的一半,这时候不能翻倍,而是将cwnd的值每次增加一个MSS。结束的过程有两种可能:1、当出现超时时,将cwnd值设为1个MSS,并且将ssthresh阈值设为当前cwnd值的一半。2、当收到三个冗余ACK时,将ssthresh阈值设为当前cwnd值的一半,并且将cwnd值设为当前cwnd值的一半加3,即ssthresh阈值加3,并且进入快速恢复状态

3.快速恢复

快速恢复就是指进入快速恢复前的一系列操作,即将ssthresh阈值设为当前cwnd值的一半,并且将cwnd值设为当前cwnd值的一半加3,即ssthresh阈值加3,之后进入拥塞避免状态,即每次cwnd的值加1个MSS

虚拟机的应用

虚拟机部署

虚拟机网络的讲解

镜像的应用

虚拟机网络排查

      1. 3、HTTP/HTTPS协议

http协议

主要特点

客户/服务器模式,基于请求与响应模式;

简单快速: 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

(——keep alive产生由来,Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接)

无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。(——cookie与session的产生由来,为了解决此问题)

URL

格式

http://host[":"port][abs_path]

http表示要通过HTTP协议来定位网络资源;

host表示合法的Internet主机域名或者IP地址;

port指定一个端口号,为空则使用缺省端口80;

abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

http请求

请求行

请求头部

空行

请求数据

http响应

状态行

消息报头

空行

响应正文

HTTP基本原理与机制

1、HTTP请求与响应机制

HTTP协议用于客户端与服务器之间的通信,在通信线路两端,必定一端是客户端,另一端是服务器。客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。

HTTP协议属于应用层,建立在传输层协议TCP之上。客户端通过与服务器建立TCP连接,之后发送HTTP请求与接收HTTP响应都是通过访问Socket接口来调用TCP协议实现

2、HTTP 请求/响应的步骤

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的语法对其进行格式化,并在浏览器窗口中显示。

HTTPS协议

概述

HTTP+加密+数据完整性保护+认证=HTTPS

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机构名称存在,但无法解密CA签名,认为是危险证书;

可对CA签名解密,解密后的摘要值A与客户端计算的摘要值B不相等,说明证书信息被篡改,认为是危险证书

可对CA签名解密,解密后的摘要值A与客户端计算的摘要值B相等,说明证书是有效的且证书信息完整,客户端直接获取证书内服务端的公钥,从而保证公钥确实是服务端的不是别人的,以此来验证服务器身份,确保与服务端的安全通信;

证书过期失效验证;

HTTPS握手与协商过程(SSL/TSL握手过程)

1、【客户端】client hello

2、【服务端】server_hello+server_certificate+server_hello_done

3、【客户端】证书校验

4、【客户端】Client_key_exchange+change_cipher_spec+encrypted_handshake_message

5、【服务端】change_cipher_spec+encrypted_handshake_message

6、建立加密通信:开始使用协商密钥Master secret与对称加密算法进行加密通信

7、单项认证

 

8、双向认证

 

HTTPS的缺点

通信慢:和HTTP相比,SSL/TSL通信部分消耗网络资源。而SSL/TSL通信部分,又因为要对通信进行处理,所以时间上又延长了;

资源消耗导致处理速度慢:由于HTTPS还需要做服务器、客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源;

什么是GET, POST, session, cookie等

GET

简介

从指定的资源请求数据

特性

GET 请求可被缓存

GET 请求保留在浏览器历史记录中

GET 请求可被收藏为书签

GET 请求不应在处理敏感数据时使用

GET 请求有长度限制

GET 请求只应当用于取回数据

POST

简介

向指定的资源提交要被处理的数据

特性

POST 请求不会被缓存

POST 请求不会保留在浏览器历史记录中

POST 不能被收藏为书签

POST 请求对数据长度没有要求

Cookie

简介

Cookie(复数形态:Cookies)是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

Cookie是由服务端生成的,发送给客户端(通常是浏览器)的。Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie:

内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。

硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。

工作原理

1、创建Cookie

①该用户生成一个唯一的识别码(Cookie id),创建一个Cookie对象;

②默认情况下它是一个会话级别的cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。如果网站希望浏览器将该Cookie存储在磁盘上,则需要设置最大时效(maxAge),并给出一个以秒为单位的时间(将最大时效设为0则是命令浏览器删除该Cookie);

③将Cookie放入到HTTP响应报头,将Cookie插入到一个 Set-Cookie HTTP请求报头中。

④发送该HTTP响应报文。

2、设置存储Cookie

浏览器收到该响应报文之后,根据报文头里的Set-Cookied特殊的指示,生成相应的Cookie,保存在客户端。该Cookie里面记录着用户当前的信息。

3、发送Cookie

当用户再次访问该网站时,浏览器首先检查所有存储的Cookies,如果某个存在该网站的Cookie(即该Cookie所声明的作用范围大于等于将要请求的资源),则把该cookie附在请求资源的HTTP请求头上发送给服务器

4、读取Cookie

 服务器接收到用户的HTTP请求报文之后,从报文头获取到该用户的Cookie,从里面找到所需要的东西

作用

1、记住密码,下次自动登录。

2、购物车功能。

3、记录用户浏览数据,进行商品(广告)推荐。

缺陷

①Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。

②由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题。(除非用HTTPS)

③Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。

Session

简介

Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。Session是一种服务器端的机制,Session 对象用来存储特定用户会话所需的信息。

Session由服务端生成,保存在服务器的内存、缓存、硬盘或数据库中。

工作原理

1、创建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,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。

2、使用Session

我们知道在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传递回服务器

作用

1、判断用户是否登录。

2、购物车功能。

Get与Post的区别

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST没有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中

session与cookie的区别

1、存放位置不同

Cookie保存在客户端,Session保存在服务端。

2 、存取方式的不同

 Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比拟艰难的。

而Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。

3、安全性(隐私策略)的不同

Cookie存储在浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。 假如选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。而假如选择Session就省事多了,反正是放在服务器上,Session里任何隐私都能够有效的保护。

4、有效期上的不同

只需要设置Cookie的过期时间属性为一个很大很大的数字,Cookie就可以在浏览器保存很长时间。 由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默许为–1,只需关闭了浏览器(一次会话结束),该Session就会失效。

5、对服务器造成的压力不同

Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。而Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。

6、 跨域支持上的不同

Cookie支持跨域名访问,例如将domain属性设置为“.baidu.com”,则以“.baidu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

什么是无状态?

HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。(——cookie与session的产生由来,为了解决此问题)

    1. web开发技术
      1. 客户端开发技术

html

javascript

css

其他前端技术

      1. 服务器端开发技术

java

php

python

ajax

其他后端技术

    1. web测试技术
      1. 软件测试原理

原理1:测试可以证明缺陷存在,但不能证明缺陷不存在。

测试可以证明产品是失败的,也就是说产品中有缺陷。但测试不能证明程序中没有缺陷。适当的测试可以减少测试对象中的隐藏缺陷。即使在测试中没有发现失效,也不能证明其没有缺陷。

原理2:穷尽测试是不可能的。

考虑所有可能输入值和它们的组合,并结合所有不同的测试前置条件进行穷尽测试是不可能的。在实际测试过程中,对软件进行穷尽测试会产生天文数字的测试用例。所以说,每个测试都只是抽样测试。因此,必须根据风险和优先级,控制测试工作量。

原理3:测试活动应当尽早开始。

在软件生命周期中,测试活动应当尽早开始,而且应当聚焦于定义的目标上。这样可以尽早发现缺陷。

原理4:缺陷集群性。

通常情况下,大多数的缺陷只存在于测试对象的极小部分中。缺陷并不是平均而是集群分布的。因此,如果在一个地方发现了很多缺陷,那么通常在附近会有更多的缺陷。在测试中,应当机动灵活地应用这个原理。

原理5:杀虫剂悖论。

如果同样的测试用例被一再重复地执行,会减少其有效性。先前没有发现的缺陷也不会被发现。因此,为了维持测试的有效性,战胜这种“抗性药”,应当对测试用例进行不断修改和更新。这样软件中未被测试过的部分或者先前没有被使用的输入组合就会重新执行,从而发现更多的缺陷。

原理6:测试依赖于测试内容。

测试必须与应用程序的运行环境和使用中固有的风险相适应。因此,没有两个系统可以以完全相同的方式进行测试。对于每个软件系统,测试出口准则等等应当根据它们使用的环境分别量体定制。安全关键系统与电子商务应用程序要求的测试是不同的。

原理7:没有失效就是有用系统是一种谬论。

找到失效、修正缺陷并不能保证整个系统可以满足用户的预期要求和需要。在开发过程中用户的早期介入和原型系统的使用就是为了避免问题的预防性措施。

      1. 测试技术

测试的对象与目的

测试目的

软件测试是为了发现错误而执行程序的过程

测试是为了证明程序有错,而不是证明程序无错

一个好的测试用例在于它发现至今未发现的错误

一个成功的测试是发现了至今未发现的错误的测试

测试对象

程序

数据

文档

测试的原则

尽早的介入测试,在需求设计阶段就应该开始设计。

所有测试应该要反馈到用户需求。

程序或系统的测试需要专门的人员负责,除了单元测试,其他测试应该交给专业人员跟进。

设计测试用例时要考虑到合法输入和非法输入以及各种边界条件,特殊情况还要制造极端状态和意外状态(冒烟测试)。

二八原则,80%的错误很可能起源于20%的模块中。

对错误结果要进行一个确认过程。

制定严格的测试计划。

要保存测试过程中的所有文档。

测试的停止依据

测试超过了预定时间,则停止测试;

执行了所有的测试用例,但并没有发现故障,则停止测试;

使用特定的测试用例设计方案作为判断测试停止的基础;

正面指出停止测试的具体要求,即停止测试的标准可定义为查出某一预定数目的故障;

根据单位时间内查出故障的数量决定是否停止测试

软件测试模型

传统瀑布模型

 

 

V模型

 

W模型

 

X模型

 

H模型

 

测试计划

测试环境

测试环境=软件+硬件+网络+数据准备+测试工具

测试数据的筛选与准备

软件测试策略

提供了对测试对象进行测试的推荐方法。
对于每种测试,都应提供测试说明,并解释其实施的原因。
制定测试策略时所考虑的主要事项有:将要使用的技术以及判断测试何时完成的标准。
下面列出了在进行每项测试时需考虑的事项,除此之外,测试还只应在安全的环境中使用已知的、有控制的数据库来执行。
注意:不实施某种测试,则应该用一句话加以说明,并陈述这样的理由。例如,“将不实施该测试。该测试本项目不适用”

测试用例的设计与编写

等价类划分法

边界值分析法

错误推断法

因果图法

判定表驱动发

正交试验法

功能图法

场景法

白盒测试

白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖

目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。

原则:(1)一个模块中的所有独立路径至少被测试一次。
(2)所有逻辑值均需测试true和false两种情况。
(3)检査程序的内部数据结构,保证其结构的有效性。
(4)在取值的上、下边界及可操作范围内运行所有循环。

白盒测试方法

静态测试

不通过执行程序而进行测试的技术。静态分析的关键功能是检查软件的表示和描述是否一致,有无冲突或者歧义。

动态测试

当软件系统在模拟的或真实的环境中执行之前、之中和之后,对软件系统行为的分析。动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。

BUG的提交与维护

BUG的定义

软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节、或与需求文档存在差异的功能实现等

BUG的由来

1、缺乏有效沟通

2、软件的复杂度

3、编程错误

4、不断变更的需求

5、时间的压力

BUG的优先级

1级:紧急,需要立即解决的问题,对应严重度为致命问题

2级:高 ,软件的主要功能错误或者造成软件崩溃,数据丢失的缺陷

3级:中    ,影响软件功能和性能的一般缺陷

4级:低    ,对软件的质量影响非常轻微的缺陷,多为建议性或者UI层级的问题

BUG严重程度

致命

严重

一般

建议

BUG的类型

功能类、性能类、界面类、易用性类、兼容性类、其它

功能问题、设计缺陷、界面优化、性能问题、配置相关、安装部署、安全相关、标准规范、测试脚本、文档错误、兼容问题、用户体验、其它

单元测试

对软件中的最小可测试单元进行检查和验证

集成测试

也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试

常用两种测试技术:功能性测试、非功能性测试

系统测试

对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方

分类:恢复测试、安全测试、压力测试

测试报告的编写

      1. web性能

页面级性能优化

1. 减少 HTTP请求数

(1). 从设计实现层面简化页面

保持页面简洁、减少资源的使用时最直接的

(2). 合理设置 HTTP缓存

缓存的力量是强大的,恰当的缓存设置可以大大的减少 HTTP请求

原则很简单,能缓存越多越好,能缓存越久越好

(3). 资源合并与压缩

尽可能的将外部的脚本、样式进行合并,多个合为一个。另外, CSS、 Javascript、Image 都可以用相应的工具进行压缩,压缩后往往能省下不少空间。

(4). CSS Sprites

合并 CSS图片,减少请求数的又一个好办法。

(5). Inline Images

使用 data: URL scheme的方式将图片嵌入到页面或 CSS中,如果不考虑资源管理上的问题的话,不失为一个好办法。如果是嵌入页面的话换来的是增大了页面的体积,而且无法利用浏览器缓存。使用在 CSS中的图片则更为理想一些

(6). Lazy Load Images

这条策略实际上并不一定能减少 HTTP请求数,但是却能在某些条件下或者页面刚加载时减少 HTTP请求数。

2. 将外部脚本置底

最简单可依赖的方法就是将脚本尽可能的往后挪,减少对并发下载的影响。

3. 异步执行 inline脚本

建议将执行时间较长的 inline脚本异步执行,异步的方式有很多种,例如使用 script元素的defer 属性(存在兼容性问题和其他一些问题,例如不能使用 document.write)、使用setTimeout ,此外,在HTML5中引入了 Web Workers的机制,恰恰可以解决此类问题。

4. Lazy Load Javascript

随着 Javascript框架的流行,越来越多的站点也使用起了框架。不过,一个框架往往包括了很多的功能实现,这些功能并不是每一个页面都需要的,如果下载了不需要的脚本则算得上是一种资源浪费 -既浪费了带宽又浪费了执行花费的时间。目前的做法大概有两种,一种是为那些流量特别大的页面专门定制一个专用的 mini版框架,另一种则是 Lazy Load。

5. 将 CSS放在 HEAD中

如果将 CSS放在其他地方比如 BODY中,则浏览器有可能还未下载和解析到 CSS就已经开始渲染页面了,这就导致页面由无 CSS状态跳转到 CSS状态,用户体验比较糟糕。除此之外,有些浏览器会在 CSS下载完成后才开始渲染页面,如果 CSS放在靠下的位置则会导致浏览器将渲染时间推迟。

6. 异步请求 Callback

在某些页面中可能存在这样一种需求,需要使用 script标签来异步的请求数据。

7. 减少不必要的 HTTP跳转

对于以目录形式访问的 HTTP链接,很多人都会忽略链接最后是否带 ’/',需要注意,这其中很可能隐藏了 301跳转,增加了多余请求。

8. 避免重复的资源请求

这种情况主要是由于疏忽或页面由多个模块拼接而成,然后每个模块中请求了同样的资源时,会导致资源的重复请求

9. 精简Javascript和CSS

精简就是将Javascript或CSS中的空格和注释全去掉,

代码级性能

1. Javascript

(1). DOM

a. HTML Collection

需要遍历 HTML Collection的时候,尽量将它转为数组后再访问,以提高性能。即使不转换为数组,也请尽可能少的访问它,例如在遍历的时候可以将 length属性、成员保存到局部变量后再使用局部变量。

b. Reflow & Repaint

DOM操作还需要考虑浏览器的 Reflow和Repaint ,因为这些都是需要消耗资源的

(2). 慎用 with

使用 with相当于增加了作用域链长度。而每次查找作用域链都是要消耗时间的,过长的作用域链会导致查找性能下降。

除非能肯定在 with代码中只访问 obj中的属性,否则慎用 with,替代的可以使用局部变量缓存需要访问的属性。

(3). 避免使用 eval和 Function

每次 eval 或 Function 构造函数作用于字符串表示的源代码时,脚本引擎都需要将源代码转换成可执行代码。这是很消耗资源的操作 —— 通常比简单的函数调用慢 100倍以上。

eval 函数效率特别低,由于事先无法知晓传给 eval 的字符串中的内容,eval在其上下文中解释要处理的代码,也就是说编译器无法优化上下文,因此只能有浏览器在运行时解释代码。这对性能影响很大。

Function 构造函数比 eval略好,因为使用此代码不会影响周围代码 ;但其速度仍很慢。

此外,使用 eval和 Function也不利于Javascript 压缩工具执行压缩。

(4). 减少作用域链查找

这一点在循环中是尤其需要注意的问题。如果在循环中需要访问非本作用域下的变量时请在遍历之前用局部变量缓存该变量,并在遍历结束后再重写那个变量,这一点对全局变量尤其重要,因为全局变量处于作用域链的最顶端,访问时的查找次数是最多的。

(5). 数据访问

Javascript中的数据访问包括直接量 (字符串、正则表达式 )、变量、对象属性以及数组,其中对直接量和局部变量的访问是最快的,对对象属性以及数组的访问需要更大的开销。

a. 对任何对象属性的访问超过 1次

b. 对任何数组成员的访问次数超过 1次

另外,还应当尽可能的减少对对象以及数组深度查找。

(6). 字符串拼接

在 Javascript中使用"+" 号来拼接字符串效率是比较低的,因为每次运行都会开辟新的内存并生成新的字符串变量,然后将拼接结果赋值给新变量。与之相比更为高效的做法是使用数组的 join方法,即将需要拼接的字符串放在数组中最后调用其 join方法得到结果。不过由于使用数组也有一定的开销,因此当需要拼接的字符串较多的时候可以考虑用此方法。

2. CSS选择符

3. HTML

4. Image压缩

优化方法

网页内容

减少http请求次数

减少DNS查询次数

避免页面跳转

缓存Ajax

延迟加载

提前加载

减少DOM元素数量

根据域名划分内容

减少iframe数量

避免404

服务器

使用CDN

添加Expries或Cache-Control报文头

Gzip压缩传输文件

配置ETags

尽早flush输出

使用GET Ajax请求

避免空的图片src

Cookie

减少Cookie大小

页面内容使用无cookie域名

CSS

将样式表置顶

避免CSS表达式

用<link>代替@import

避免使用Filters

Javascript

将脚本置底

使用外部Javascript和CSS

精简Javascript和CSS

去除重复脚本

减少DOM访问

使用智能事件处理

图片

优化图像

优化CSS Sprite

不要在HTML中缩放图片

使用小且可缓存的favicon.ico

移动客户端

保持单个内容小于25kb

打包组建成符合文档

      1. 安全

SQL注入测试与防止SQL注入

SQL注入

SQL注入原理

对于WEB应用来说,用户数据等都是存储在数据库中的。SQL注入就是攻击者通过构造一些恶意的SQL查询语句,让后台的数据库去解析,从而达到入侵目标网络,获取敏感信息的攻击手段

SQL的危害

一旦数据库被入侵的话,黑客们可以搞得事情就多了,例如(拖库),就是把你整个数据库拿下来,这就意味着你所有的用户信息泄露。这些被获取到用户信息可以可能会被倒卖,二次利用

SQL注入的分类

错误回显

错误回显是通数据库的报错信息来获取一些数据库的基本信息。错误回显最基础的注入就是单引号【'】

布尔注入

布尔注入的思路主要是以下三点。1、提前闭合语句。2、利用OR和AND构造特殊情况,例如恒为正确。3、注释后面多余的SQL语句

时间盲注

盲注是不能通过直接显示的途径来获取数据库数据的方法。在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同)。

UNION 注入

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。所以你如果想要使用union查询来进行注入,你首先要猜测后端查询语句中查询了多少列,哪些列可以回显给用户。

SQL注入预防

确定SQL漏洞的方法

1、错误提示

如果目标Web网站开启了错误显示,攻击者就可以通过反复调整发送的参数、查看页面打印的错误信息,推测出Web网站使用的数据库和开发语言等重要信息。

2、盲注

除非运维人员疏忽,否则大部分的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注入的方法

1、检查变量数据类型和格式

只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格式去检查,确保变量是我们预想的格式

2、过滤特殊符号

对于无法确定固定格式的变量,一定要进行特殊符号过滤或转义处理。

3、绑定变量,使用预编译语句

绑定变量使用预编译语句是预防SQL注入的最佳方式,使用预编译的SQL语句语义不会发生改变,在SQL语句中,变量用问号?表示,黑客即使本事再大,也无法改变SQL语句的结构

跨站脚本攻击(XSS)及如何测试与防范XSS

定义

指利用网站漏洞从用户那里恶意盗取信息。

成因

XSS漏洞成因是由于动态网页的Web应用对用户提交请求参数未做充分的检查过滤,允许用户在提交的数据中掺入代码,然后未加编码地输出到第三方用户的浏览器,这些攻击者恶意提交代码会被受害用户的浏览器解释执行。

XSS生效方式

(1)构造URL

XSS攻击者通过构造URL的方式构造了一个有问题的页面;当其他人点击了此页面后,会发现页面出错,或者被暗中执行了某些js脚本,这时,攻击行为才真正生效。

(2)发布内容式

构造URL攻击方式传播范围有限,被攻击者只要有基本的安全意识就可以避免,因此这种手段的危险性比较小。相比之下,通过发表内容构造的XSS的危害就大了很多。

在可以发表内容的论坛、讨论区、吧、博客、微博等网站上,用户发表的内容会保存起来,允许其他用户浏览。这些保存的内容显示在页面上的时候,如果没有经过正确的处理,也会把攻击者精心构造的内容显示出来,访问该内容的用户就此中招。如果该页面流传广泛,则影响会更加深远。

(3)蠕虫式

最暴力的方式是使用蠕虫——就是首先发一个有问题的文章,浏览者阅读时会被暗中执行恶意代码,发表一篇新的文章的,该文章也含有同样的恶意代码。这样有可能在最快时间内将攻击铺满整个网站。蠕虫式攻击将暗中偷偷摸摸的攻击行为变成了光明正大的攻城拔寨,极容易被发现和修复。

XSS攻击实例

(1)XSS偷取用户信息

(2)XSS盗取Cookie

(3)XSS钓鱼网站

(4)XSS蠕虫攻击

XSS的破坏方式

(1)破坏页面结构:用户输入的内容包含了html的标签,与前面的标签等闭合,导致页面的DIV结构发生变化,页面错乱。

(2)破坏显示内容:用户输入的内容包含了单引号或双引号,与前面的单引号或双引号匹配,导致后面的内容丢失,显示不出来。

(3)破坏JS:用户产生的内容直接输出到js片断中,但仅转义少数字符不能保证排除攻击,所以容易导致JS被破坏

XSS攻击 绕过过滤的一些简单方法

1、大小写绕过

这个绕过方式的出现是因为网站仅仅只过滤了<script>标签,而没有考虑标签中的大小写并不影响浏览器的解释所致

2、利用过滤后返回语句再次构成攻击语句来绕过

即我们输入一串原始值,网站将输入的原始值进行过滤,过滤后的值仍是一段可执行的代码。

3、并不是只有script标签才可以插入代码!

4、编码脚本代码绕过关键字过滤。

有的时候,服务器往往会对代码中的关键字(如alert)进行过滤,这个时候我们可以尝试将关键字进行编码后再插入,不过直接显示编码是不能被浏览器执行的,我们可以用另一个语句eval()来实现。【eval()会将编码过的语句解码后再执行】

5、组合各种方式

在实际运用中漏洞的利用可能不会这么直观,需要我们不断的尝试,甚至组合各种绕过方式来达到目的。

XSS预防

XSS攻击造成的危害之所以会发生,是因为用户的输入变成了可执行的代码,因此我们要对用户的输入进行HTML转义处理,将其中的尖括号,引号,单引号等特殊字符进行转义编码,例如“〈”转义后为“<;”,“>”转义后为“>;”,“'”转义后为“&;”,“"”转义后为“";”

DOS与DDOS及预防方法

DOS

DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。

 DOS(Denial Service)拒绝服务式攻击,它是一种实现即简单很有效的针对服务器进行的攻 击方式,它的攻击目的就是让被攻击的主机和服务器拒绝用户正常访问,破坏系统正常运行 ,从而达到互联网用户无法连接被攻击的服务器和主机,造成服务器瘫痪。它的攻击过程,首先攻击者向被攻击的服务器发生大量带有虚假IP地址的服务请求,被攻击者在接收到请求 后返回确认信息,等待攻击者确认,此过程需要TCP的三次交换。由于攻击者发送的请求信 息是虚假的,所以被攻击服务器无法接受到信息确认,一直处于等待状态,而分配给这次请 求的资源却始终没有被释放。当被攻击者等待一定的时间后,连接会因超时而被断开,这是 攻击者再次发送新的虚假信息请求,就这样最终服务器资源被耗尽,直到瘫痪。

DDOS

DDOS就是控制多台电脑对同一目标进行DOS攻击。DDOS是英文Distributed Denial of Service的缩写,意即"分布式拒绝服务",DDOS的中文名叫分布式拒绝服务攻击, 俗称洪水攻击。

DDOS(Distributed Denial Service)分布拒绝式攻击,它是在DOS基础上进行的大规模,大 范围的攻击模式,DOS只是单机和单机之间的攻击模式,而DDOS是利用一批受控制的僵尸主 机向一台服务器主机发起的攻击,其攻击的强度和造成的威胁要比DOS严重很多,更具破坏 性。首先DDOS攻击者要寻找僵尸主机,在互联网上寻找一些有后门漏洞的主机,然后入侵系  统安装控制程序,入侵的越多,控制的僵尸主机就越多,攻击源就更多,然后把入侵的主机 分配,一部分充当攻击的主要控制端,一部分充当攻击源,各负其责,在攻击者统一指挥下 对被攻击的服务器发起攻击,由于这个攻击模式是在幕后操作,所以很难被监控系统跟踪, 身份不容易被发现。

常规防御方法

1、确保服务器的系统文件是最新的版本,并及时更新系统补丁。

2、关闭不必要的服务。

3、限制同时打开的SYN半连接数目,缩短SYN半连接的time out 时间,限制SYN/ICMP流量

4、正确设置防火墙

5、认真检查网络设备和主机/服务器系统的日志。只要日志出现漏洞或是时间变更,那这台机器就可能遭到了攻击。

6、限制在防火墙外与网络文件共享。这样会给黑客截取系统文件的机会,主机的信息暴露给黑客,无疑是给了对方入侵的机会。

7、充分利用网络设备保护网络资源

8、用足够的机器承受黑客攻击

9、检查访问者的来源

SSL/https

跨站伪造请求攻击 cross site request forgeries (CSRF)及预防

定义

意为跨网站请求伪造,也有写为XSRF。攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请 求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法 权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻击者的目的。

现状

CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

原理

触发条件

1.登录受信任网站A,并在本地生成Cookie。

2.在不登出A的情况下,访问危险网站B。

CSRF的防御

服务端进行CSRF防御

服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。

(1).Cookie Hashing(所有表单都包含同一个伪随机值)

(2).验证码

(3).One-Time Tokens(不同的表单包含一个不同的伪随机值)

CSRF预防策略

(1)验证 HTTP Referer 字段

(2)在请求地址中添加 token 并验证

(3)在 HTTP 头中自定义属性并验证

 安全证书的意义,浏览器在证书失效提示

意义

所谓的网站安全证书 是通过在客户端浏览器和Web服务器之间建立一条SSL安全通道保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否真实可靠。

浏览证书失效时在浏览正规安全网站时会提示

数据加密技术

概念

"加密",是一种限制对网络上传输数据的访问权的技术。原始数据(也称为明文,plaintext)被加密设备(硬件或软件)和密钥加密而产生的经过编码的数据称为密文(ciphertext)。将密文还原为原始明文的过程称为解密,它是加密的反向处理,但解密者必须利用相同类型的加密设备和密钥对密文进行解密。

加密基本功能

1. 防止不速之客查看机密的数据文件;

2. 防止机密数据被泄露或篡改;

3. 防止特权用户(如系统管理员)查看私人数据文件;

4. 使入侵者不能轻易地查找一个系统的文件。

加密方式

从技术上上划分

①链路加密:通常把网络层以下的加密叫链路加密,主要用于保护通信节点间传输的数据,加解密由置于线路上的密码设备实现。根据传递的数据的同步方式又可分为同步通信加密和异步通信加密两种,同步通信加密又包含字节同步通信加密和位同步通信加密。

②节点加密:是对链路加密的改进。在协议传输层上进行加密,主要是对源节点和目标节点之间传输数据进行加密保护,与链路加密类似.只是加密算法要结合在依附于节点的加密模件中,克服了链路加密在节点处易遭非法存取的缺点。

③端对端加密:网络层以上的加密称为端对端加密。是面向网络层主体。对应用层的数据信息进行加密,易于用软件实现,且成本低,但密钥管理问题困难,主要适合大型网络系统中信息在多个发方和收方之间传输的情况。

一般加密分类

1. 根本不考虑解密问题;

2. 私用密钥加密技术:对称式加密(Symmetric Key Encryption):对称式加密方式对加密和解密使用相同的密钥。通常,这种加密方式在应用中难以实施,因为用同一种安全方式共享密钥很难。如:RC4、RC2、DES 和 AES 系列加密算法。

3. 公开密钥加密技术:非对称密钥加密(Asymmetric Key Encryption):非对称密钥加密使用一组公共/私人密钥系统,加密时使用一种密钥,解密时使用另一种密钥。公共密钥可以广泛的共享和透露。当需要用加密方式向服务器外部传送数据时,这种加密方式更方便。如: RSA

4. 数字证书。(Certificate):数字证书是一种非对称密钥加密,但是,一个组织可以使用证书并通过数字签名将一组公钥和私钥与其拥有者相关联。

数据加密应用

1、媒体加密:DRM

2、文件加密:文本加密、pdf、word

3、 数据加密:ASP.NET(C#)中的数据加密

4、硬件加密:加密狗

加密方式

1、  对称加密:对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码)。因此,通信双方都必须获得这把钥匙,并保持钥匙的秘密。

DES加密解密过程

1、 生成key和IV

2、 字符串明文转成某一代码页对应的编码字节流

3、 加密操作

4、 解密操作

5、 从编码字节流转成字符串明文

常见的对称加密算法:DES,AES,3DES等等

2、非对称加密:非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。

RSA加密和解密

RSA缺点

A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

B)分组长度太大,为保证安全性,n 至少也要 600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个

RSA原理

当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时可以拆分之后分段加密。

常见的非对称加密算法:RSA,ECC

    1. 服务器及部署知识
      1. apache
      2. tomcat
      3. ant
      4. git
      5. jenkins
      6. maven等工具
    2. 浏览器机制
      1. 理解浏览器在处理javascript及渲染CSS的机制
      2. 了解IE与其他浏览器的差异
      3. 为什么兼容性测试时需要特别关注IE
      4. 浏览器在加载javascript,CSS有时在前面有时在后面,为什么?
      5. 加载顺序会对视觉和使用上有什么影响呢?
      6. 常见内核和对应的浏览器

Webkit内核

1.Safari浏览器:Safari,苹果计算机的操作系统Mac OS中浏览器,2003年,用来取代之前的Internet Explorer for Mac

2.Chrome:Chrome的目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

Presto内核

Opera采用的内核:该内核在2003年的Opera7中首次被使用,    一直到2013年2月,Opera浏览器宣布改为Webkit内核,    其实也是件好事,因为可以少做一点兼容性测试,省一些工夫

Trident内核

1. IE

2. MaxThon 傲游浏览器(傲游1.x、2.x为IE内核,3.x为IE与Webkit双核)是一款多功能、个性化多标签浏览器。

3.腾讯TT浏览器是一款集多线程、黑白名单、智能屏蔽、鼠标手势等功能于一体的多页面浏览器,具有快速、稳定、安全的特点。

4.世界之窗浏览器是一款快速、安全、功能细节丰富且强大的绿色多窗口浏览器,由凤凰工作室(现变身为“北京超卓科技有限公司”)开发。

5.360浏览器

6.搜狗高速浏览器-这可能是当今启动最快的浏览器

Gecko内核

1.netscape浏览器 网景浏览器

2.Mozilla,Mozilla名字来自Mosaic和Godzilla(怪兽哥斯拉)两个词的结合,意为“Mosaic终结者”。Mosaic是互联网历史上第一个获普遍使用的网页浏览器。

    1. web架构
      1. 软件出错时怎么个报警法?是否有详尽的log记录?
      2. 服务器缓存机制如何?
      3. 数据库如何主从同步,如何备份的?
      4. 集群如何处理session的?
    2. 其他需要掌握技能
      1. Linux

linux系统

RedHat的部署

远程连接RedHat服务器

命令分类及命令格式

目录操作

文件操作

用户操作

组管理

文件及目录权限

进程管理

任务管理

linux故障维护

shell脚本设计与开发

管道与变量

标准输出输入、重定向

条件测试、整数值|字符串比较

测试操作、整数值|字符串的比较、逻辑测试

if条件语句与案例分析

while循环与案例分析

case语句案例应用

break语句与continue语句

函数的案例与应用

      1. 脚本语言等
    1. SEO
      1. XML sitemap的意义,可以让搜索引擎了解你的网站地图
      2. 了解 robots.txt 和搜索引擎爬虫是如何工作的
      3. 友好的搜索引擎URL

URL越短越好

静态URL地址

保持URL的一致性

      1. 重定向301和302

301 redirect

301代表永久性转移(Permanently Moved),301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。

302 redirect

302代表暂时性转移(Temporarily Moved )

      1. 网页Meta信息中title,description等的重要性
    1. 用户体验
      1. 访问网站的用户操作行为是怎么样的?页面的访问频率占比如何?因为测试的精力和侧重点也要根据这个数据而定   
      2. 网站部署时是否会影响到用户使用,如何避免?
      3. 不要直接显示不友好的错误提示,是否有友好的提示信息?
      4. web应用不能泄漏用户的隐私信息
      5. 页面是在当前页打开还是另开一个tab?
      6. 页面元素的布局如何影响到用户体验的?
    2. ORACLE/SQL
      1. 基础语句

增:insert

删:delete

改:update

查:selete

      1. 限制性查询和数据的排序

限制性查询和数据的排序

ORDER BY

      1. 常用的SQL*PLUS语句

DESC

SET LINE

Del

      1. 单行函数

字符型函数

单行字符型函数

ROUND和TRUNC

      1. NULL值的处理、逻辑操作和函数嵌套

NULL

逻辑运算符和逻辑表达式

运算符的优先级

      1. 分组函数

COUNT

AVE和SUM

MIN和MAX

GROUP BY

HAVING

      1. 多表查询

多表连接

相等连接

      1. 子查询

WHERE

HAVING

FROM

    1. 使用工具
      1. HttpWatch,基于IE的网络数据分析工具,包括网页摘要,Cookies管理,缓存管理,消息头发送/接受,字符查询,POST 数据和目录管理功能等
      2. FireBug,用途同上,基于firefox的
      3. Yslow,前端网站性能工具,显示测试结果的分析,分为等级、组件、统计信息
      4. Fiddler,强大的web前端调试工具,它能记录/拦截所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,也可用于安全测试
      5. Chrome扩展程序:浏览器兼容性检测工具,分析网站的兼容性情况
      6. ShowIP:显示访问网站的IP,web测试中你是否经常因为访问的网站IP不对,而被开发人员BS呢?它能帮助到你。
      7. 网络限速等工具:netlimiter

注:内容来自多个地方汇总,具体来源未备注

内容原版为xmind脑图:https://download.csdn.net/download/qq_34897661/10819415

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值