【WEB安全学习入门知识一】

本文围绕WEB安全展开,介绍了如何建立WEB安全模型,阐述了WEB安全的五个领域,包括静态层、脚本层、服务层、数据层和操作系统层及各层漏洞。还讲解了网站系统的理解,以及C/S和B/S架构区别、HTTP协议等基础知识,给出GET和POST请求及响应示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


WEB安全作为网络安全的一个领域,今天开始将学习相关知识,希望一步一个脚印打好基础

web安全模型如何建立

WEB安全的内容和学习的项也是繁多,可以先看看这篇文章对WEB安全有个大概的认知 :《先建立一个web模型》:具体论坛文章https://zhuanlan.zhihu.com/p/26053309?utm_medium=social&utm_source=weibo
PS:一切一切的前提就是“不娱乐”,静下来去学习,去与人虚心讨教,互相鼓励,我相信很快就能有所收获。

WEB安全分为哪些领域

第一层 静态层
这个层面有我们遇到的JS、html等等,可以横向延伸到漏洞方向有:XSS、CSRF、jsonp跨域、点击劫持问题等等,横向延伸到组件方向有:JQuery、vue.Js、node.js、angular.js…等等

第二层 脚本层
这个层面有我们遇到的asp、aspx、php、jsp、perl、cgi…等等,可以横向延伸到的漏洞方向有:远程代码执行、文件包含、文件上传、逻辑漏洞、SQL注入…等等,横向延伸到组件方向有:Zend Framework、ThinkPHP、CI、Strtus…等等

第三层 Server(服务)层
这个层面有我们遇到的Apache、Nginx、IIS…等等,可以横向延伸到漏洞方向有:远程代码执行、文件解析漏洞、拒绝服务攻击、权限配置不当…等等,横向延伸到的组件的方向就是各个Server的扩展。

第四层 DB(数据)层
这个层面有我们遇到的 SQL Server、Access、MySQL、Oracle、Postgresql…等等,可以延伸到漏洞方向有:缓冲区溢出、越权操作、配置不当、拒绝服务攻击…等等,横向延伸到组件方向就是各个数据的特性、特点。

第五层 OS(操作系统)层
以上所有的模型前提都是通过操作系统建立服务从而工作起来的,系统平台我们大概分为Windows、Linux,横向延伸的漏洞有:本地提权、缓冲区溢出、远程代码执行、拒绝服务攻击…等等
下面我来制作一个图像来让大家清晰看到模型之间的关系:

方向可以在每个层去发展,但是建议先从静态层慢慢了解,去学习,其次上升层次。一定要学会一门脚本语言,搞Web安全的不会脚本语言,是一个扎心的事儿。本人是PHP程序员出身,自然知道会一门脚本语言能给自己的技术带来多大的提升。还有就是学习技术不是一朝一夕的事情,需要长时间的积累和拓展,本文只是大概的涵盖了一下,不一定是“全部”,我想这个模型本身就很复杂,是可以写成一本book的,卖价也不会低。最后就是,请热爱编程……它真的可以给你带来质的飞越!

网站的理解

我理解的网站系统是呈现内容和处理页面,是一个接收客户端请求并且相应的前端系统,是一套和客户端进行通信的规范系统。客户的请求或在web系统中经过确认后,来判断是否有操作网站的权限,来决定是否给予客户端相应的内容回馈。

在这里插入图片描述

基础知识的学习

第一天学习内容如下,当然只是粗略的学习,下面两个连接中的内容还得好好研究一下,先建立一个学习的框架如上所看见的内容
1、C/S架构和B/S架构的区别
C/S是client/Server客户端服务器模式,B/S是browser/server浏览器服务器模式属于C/S一种
2、HTTP协议简要交互过程
简单了解下,先不深入了,和TCP通信有点像,这个百度一下网上资料很全
3、数据包解读
什么是HTTP协议,超文本传输协议,属于静态层,数据包第一行:GET为请求方法 / 路径+协议版本号、第二行主机名、第三行user-agent:客户端的版本、第四行accept:允许的接收的数据类型、第五行accept-language:允许接收的语言类型、第五行accept-encoding:接收的编码类型、第六行:cookie为服务器端区分用户客户端的值、第七行:connection为连接保持的值
4、HTTP常见的请求方法
具体可以看下别人的博客:https://www.cnblogs.com/phpper/p/9127553.html
5、HTTP状态码分类
200、302、500、404、403
详解参考https://blog.youkuaiyun.com/qq_42092177/article/details/81565249

GET 请求示例

了解请求的HTTP和应答的HTTP协议报文的内容和含义

GET https://testrail-tools.trendmicro.com/portal/admin/getTimerInitStatus HTTP/1.1
Accept: application/json, text/javascript, /; q=0.01
X-Requested-With: XMLHttpRequest
Referer: https://testrail-tools.trendmicro.com/portal/admin/toLicenseTimerConfig?id=7
Accept-Language: zh-CN
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: testrail-tools.trendmicro.com
Connection: Keep-Alive
Cookie: _ga=GA1.2.1909963682.1524537669; _gid=GA1.2.563928490.1529501401
复制代码
以上对应

第1行 请求行

请求方法(get)+空格+url(https://testrail-tools.trendmicro.com/portal/admin/getTimerInitStatus)+空格+协议版本(HTTP/1.1)

第2-10都是请求头部

Accept:表示客户端接受的内容类型,按照先后顺序表示客户端接收数据的先后次序

X-Requested-With:以x开头的是非http标准,一般是某种技术的出现而定义的;这里是用来判断是http请求还是ajax请求。

Referer:从这个页面访问请求行里的url

Accept-Language:客户端接受内容返回优先选择的语言

Accept-Encoding:客户端可以接受的服务器对返回内容进行编码压缩的格式。

User-Agent:客户端运行的浏览器类型信息。

Host:头域指定请求的服务器的地址和端口,HTTP/1.1必须包括Host,否则返回400

Connection:表示是否需要持久连接。如果web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点, web服务器需要在返回给客户端HTTP头信息中发送一个Content-Length(返回信息正文的长度)头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然 后在正式写出内容之前计算它的大小。

Cookie:http请求时,会把保存的cookie也发送服务器。cookie是保存在客户端里的,分为内存cookie和硬盘cookie。前者随着浏览器关闭而消失,后者由过期时间或者用户手动清除。因为http请求是无状态的,所以服务器为了认证,会生成sessionid,让浏览器setcookie保存起来,每次请求携带上认证信息。这部份以后再聊吧。

响应示例

复制代码
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Cache-Control: private
Expires: Wed, 31 Dec 1969 16:00:00 PST
X-Application-Context: application:prod
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 20 Jun 2018 15:00:16 GMT

{“advancewarn”:“1”,“userstatus”:“1”,“ldap”:“1”,“licensealarm”:“1”,“deltempzipfile”:“1”,“sctmlicense”:“0”,“user”:“1”}

第1行 状态行

第2-8 消息报头

Server:包含处理请求的服务器信息,包含多个产品注释和标识。

Cache-Control:告知缓存机制是否可以缓存和类型,private是只能当前用户,不能被共享。

Expires:响应过期时间

X-Application-Context:application配置,这里表示读取的是application-prod.properties

Content-Type:返回数据的类型和字符编码格式

Transfer-Encoding:告知接收端,报文采取了何种编码,chunked表示服务器无法确定消息大小,一般比如下载等,就采用chunked。

Date:返回消息的时间

第 9 行 空行

第 10 行 响应正文

消息报头指定了是返回json字符串。

POST

请求示例

POST https://testrail-tools.trendmicro.com/portal/admin/editTimer HTTP/1.1
Host: testrail-tools.trendmicro.com
Connection: keep-alive
Content-Length: 35
Accept: application/json, text/javascript, /; q=0.01
Origin: https://testrail-tools.trendmicro.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: https://testrail-tools.trendmicro.com/portal/admin/toAdminTimerConfig?id=7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: _ga=GA1.2.199305797.1501211992; _ga=GA1.1.199305797.1501211992; _gid=GA1.2.56449187.1529562439; _gat_gtag_UA_111346521_2=1

type=del&interval=1200&timelag=7200
复制代码
第1行同 get

第2-13 行 请求头部

Content-Length:告知服务器,请求数据的大小

Origin:origin类似refered,但比refered更人性化,origin只出现在post中,而origin也不携带敏感信息和具体url路径。

Content-Type:http请求提交内容的编码类型,一般只有post需要设置。application/x-www-form-urlencoded(缺省)和multipart/form-data。

第14行 空行

第15行 请求数据

响应示例

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Application-Context: application:prod
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 21 Jun 2018 07:36:58 GMT

{“result”:“edit timer success”}
复制代码
其他这里就不累述了。

说了这么多,这么多请求方式都是http协议的标准,你完全可以随心所欲,全部用post或者全部用get,但是你要是开发的是商业产品,那你就要为你自己的随便买单咯。

好比删除一样东西,如果用get请求方式:http:/xxx/delete?id=1,那你很快就知道,这些标准也能让其他人一眼就能知道具体所要做的意思。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值