零基础如何学习 Web 安全?

标签: 基础 学习 web | 发表时间:2014-02-10 09:57 | 作者:余弦
出处:http://www.zhihu.com
这是个好问题,我强迫症犯了,本来你写的是“web”,我改为了“Web”。

因为正好Web安全是我擅长的,你说的是 0基础,我总结下我的一些看法吧,针对0基础的。

一. 首先你得了解Web

Web分为好几层,一图胜千言:


事实是这样的: 如果你不了解这些研究对象是不可能搞好安全研究的。
这样看来,Web有八层(如果把浏览器也算进去,就九层啦,九阳神功……)!!!每层都有几十种主流组件!!!这该怎么办?
别急, 一法通则万法通,这是横向的层,纵向就是 数据流啦!搞定好数据流:从横向的层,从上到下→从下到上,认真看看这些数据在每个层是怎么个处理的。

数据流中,有个关键的是HTTP协议,从上到下→从下到上的头尾两端(即请求响应),搞通!难吗?《HTTP权威指南》720页!!!坑爹,好难!!!

怎么办?

横向那么复杂、纵向数据流的HTTP协议就720页的书!!!放弃好了……

不,千万别这样。

给你点信心是:《HTTP权威指南》这本书我压根没看过。但是通过百度/Google一些入门的HTTP协议,我做了大概了解,然后Chrome浏览器F12实际看看“Network”标签里的HTTP请求响应,不出几小时,就大概知道HTTP协议这玩意了。(这是快速研究的精髓啊)

搞明白HTTP协议后,你就会明白安全术语的“ 输入输出”。

黑客通过 输入提交“特殊数据”,特殊数据在 数据流的每个层处理,如果某个层没处理好,在 输出的时候,就会出现相应层的安全问题。

精彩举例:
1. 如果在操作系统层上没处理好,比如Linux的Bash环境把“特殊数据”当做 指令执行时,就产生了 OS命令执行的安全问题,这段“特殊数据”可能长得如下这般:
; rm -rf /;

2. 如果在存储层的数据库中没处理好,数据库的SQL解析引擎把这个“特殊数据”当做 指令执行时,就产生 SQL注入这样的安全问题,这段“特殊数据”可能长得如下这般:
' union select user, pwd, 1, 2, 3, 4 from users--

3. 如果在Web容器层如nginx中没处理好,nginx把“特殊数据”当做 指令执行时,可能会产生远程溢出、DoS等各种安全问题,这段“特殊数据”可能长得如下这般:
%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./%20

4. 如果在Web开发框架或Web应用层中没处理好,把“特殊数据”当做 指令执行时,可能会产生远程命令执行的安全问题,这段“特殊数据”可能长得如下这般:
eval($_REQUEST['x']);

5. 如果在Web前端层中没处理好,浏览器的JS引擎把“特殊数据”当做 指令执行时,可能会产生XSS跨站脚本的安全问题,这段“特殊数据”可能长得如下这般:
'"><script>alert(/cos is my hero./)</script>

...

怎样,刺激吧?搞懂这些,就算入门啦。
  • 记好:一切的安全问题都体现在“输入输出”上,一切的安全问题都存在于“数据流”的整个过程中。
  • 记好:“数据流”、“输入输出”这两个关键点。
你好像悟到了点什么,咱们继续……

前面说了: 如果你不了解这些研究对象是不可能搞好安全研究的。

拿我XSS来说,曾经有人问我,我回答的一个: 在学习XSS前我应该学习什么?你可与参考下。

假如我曾经要不是比较熟JavaScript、ActionScript、HTML/CSS的话,我估计我要研究好XSS是很困难的,我熟悉这些语言刚开始的出发点是想“ 创造”,我做了好些Flash动画、做了好些网站、包括自己从后端到前端独立实现过一个博客系统,为了解决好前端在各浏览器的兼容问题(当时是IE6如日中天的时候),我啃了好几本书,如《CSS网站布局实录》、《JavaScript DOM编程艺术》、《AJAX Hacks》、Flash从6版本以来到CS2的各类书籍我都多少看过,也实战过,这一切都是在大学前三年搞定的。

大学第四年冲刺Web安全(长期以来有黑客情怀),大四下学期进入知道创宇(刚创业起步),然后到了现在,一晃在知道创宇六年。

说到这,很清晰啦: 如果你不了解这些研究对象是不可能搞好安全研究的。

咱们继续:)

二. 黑客兵器谱

新人入门总在寻找好工具来提高效率,Web安全这块我之前放出了我的“兵器谱”,在这: 我的渗透利器 (会不断抽时间更新)。

工欲善其事必先利其器嘛,而且新人用了好兵器会更有成就感的。

切记:这些兵器,你不仅要知其然还得知其所以然,别堕落了哦。

三. 明白“精于一而悟道”的道理

不多说,请看这我的回答: 对于立志在网络安全领域发展,应该如何系统学习安全知识?

四. 融入圈子

多结交些靠谱的黑客,搞搞基啦(不过别来真的,还有我好讨厌 扯淡/ 水得不得了的人),微博(含:Twitter)、QQ、微信、知乎、博客等善于跟进,不仅学,也要分享,让大家知道你的存在,更有利于交流与成长。

如果你对我有兴趣,可以看我的介绍: 关于 | EVILCOS ,我自认为我自己靠谱(不,这不是浮夸,这是自信)。

关于“圈子”,我想说:别把自己局限住。

最后,再次引用黑哥的一句话:“整就牛!”

— 完 —
本文作者: 余弦

【知乎日报新版上架】无网络也能点收藏,举报评论功能新鲜开启,将精彩长评优先展示, 点此立刻更新~

此问题还有 3 个回答,查看全部。
延伸阅读:
安全感是什么?
如何评价 360 安全卫士 for Mac?

相关 [基础 学习 web] 推荐:

零基础如何学习 Web 安全?

- - 知乎每日精选
这是个好问题,我强迫症犯了,本来你写的是“web”,我改为了“Web”. 因为正好Web安全是我擅长的,你说的是 0基础,我总结下我的一些看法吧,针对0基础的. Web分为好几层,一图胜千言:. 事实是这样的: 如果你不了解这些研究对象是不可能搞好安全研究的. 这样看来,Web有八层(如果把浏览器也算进去,就九层啦,九阳神功……).

CSS基础学习

- - CSDN博客推荐文章
1.    CSS基础介绍:. (1)      CSS的作用:兼容、实现了将页面内容与页面表现相分离. (2)      当文档中的某一元素被多处样式定义时,究竟会使用那个样式呢.                 内联样式--->内部样式表--->外部样式表--->浏览器缺省设置. 2.    CSS基础语法与高级语法:.

web基础-web工作原理,http协议,浏览器缓存

- - 浏览器 - 互联网 - ITeye博客
4,cookie和session. 平时用浏览器,输入网址后回车,页面响应我们想要浏览的内容,简单操作的背后蕴涵了什么原理. 当输入url回车后,客户端(浏览器)会去请求DNS服务器,通过DNS获取域名对应的IP地址,然后通过这个地址找到对应的服务器,要求建立TCP连接,建立连接,客户端发送httpRequest(请求包)后,服务器接收并开始处理请求,调用自身服务,返回httpResponse(响应包),客户端收到响应包后开始渲染body主体,等到全部接收,断开与该服务器端的TCP连接.

SSS学习法基础

- - 学习力就是竞争力
SSS是“Start with Simple Stories”的缩写,说白了就是老一辈英语教育家经常说的“多读简易读物”,它是ER(泛读,Extensive reading)的一种. 最初是日本电报通信大学的酒井邦秀提出来的,在2001年成立了一个叫SSS英语学习法研究会的组织,它的网站是http://www.seg.co.jp/sss/,大家可以用Chrome访问一下.

Metasploit基础学习指南

- - 牛X阿德马
Metasploit 学习指南 — 基础篇. Metasploit是一款强大的渗透测试平台,其中包括了很多渗透测试利器,本文简单介绍一下Metasploit的配置和基础的使用方法,主要包括以下几个方面:. Metasploit 的核心. Metasploit 的模块. Metasploit 的实用工具.

学习Web图形的框架 WebGraph

- Le - 开源中国社区最新软件
WebGraph 是一个用来学习Web图形的框架,提供简单的方法和先进的压缩技术用来管理大量的图形. WebGraph 提供了 C++、Python 和 MATLAB 以及 Java 语言的版本.

WEB安全测试所需的基础知识提纲

- - CSDN博客Web前端推荐文章
第一章:B/S架构体系安全渗透测试基础. (1)介绍HTTP标示URL. (2)HTTP响应状态码. (3)HTTP协议传输内容. (1)HTTP常见认证机制. (2)BASE64编码介绍. (1)拒绝服务攻击基础. (2)Smurf攻击模型. (3)Fraggle攻击模型. (4)SynFlooding攻击模型.

Web基础架构:负载均衡和LVS

- - 博客园_新闻
阿里巴巴 Java 开发工程师,目前负责天猫和淘宝的店铺浏览系统,长期关注系统稳定性、性能优化、Web 系统架构. blog.hesey.net 新浪微博: Hesey 小纯纯). 在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库、缓存等等).

十倍效能提升:Web 基础研发体系的建立

- - IT瘾-dev
web 基础研发体系指的是, web 研发中一线工程师所直接操作的技术、工具,以及所属组织架构的总和. 在过去提升企业研发效能的讨论中,围绕的主题基本都是——”通过云计算、云存储等方式将底层核心技术封装成基础设施“. 互联网渗入到各行各业,业务爆发. 企业竞争白热化,对速度和品质要求越来越高. 一线工程师队伍越来越庞大,管理成本增高.

Spring Data JPA,基础学习笔记.

- - ITeye博客
最好先学习 JPA 方面的知识....在这里使用的是 Hibernate. 也已经使用了一段时间,看什么都不如看官方文档,我这里也只是写个笔记记录一下,如果能帮助到其他人,很开心 .算是个 demoshow 吧.这里也只写了一些我觉得比较有用的地方.其他一些使用知识,请参见官方文档:http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/.