从零开始学习 Web 安全与黑客技术入门指南
本文详细阐述了 Web 安全的基础概念、常见漏洞原理及防御策略,涵盖 SQL 注入、XSS、远程命令执行和越权漏洞的技术细节与防护方案。文章介绍了 Web 架构各层的数据流转过程,提供了从零开始的学习路径,包括必备工具、实践靶场、推荐书籍及技能树构建建议。强调合法合规的伦理原则,鼓励通过动手实践和持续学习掌握网络安全技术,适合希望入门 Web 安全领域的开发者与安全爱好者参考。

本文详细阐述了 Web 安全的基础概念、常见漏洞原理及防御策略,涵盖 SQL 注入、XSS、远程命令执行和越权漏洞的技术细节与防护方案。文章介绍了 Web 架构各层的数据流转过程,提供了从零开始的学习路径,包括必备工具、实践靶场、推荐书籍及技能树构建建议。强调合法合规的伦理原则,鼓励通过动手实践和持续学习掌握网络安全技术,适合希望入门 Web 安全领域的开发者与安全爱好者参考。

对于很多人来说,"黑客"是一个神秘的代名词。加之影视作品夸张的艺术表现,使得这个原本专注于技术的群体散发出亦正亦邪的神秘色彩。
黑客源自英文 Hacker 一词,最初指热心于计算机技术、水平高超的电脑高手,尤其是程序设计人员。 随着时间推移,根据行为动机和道德标准,逐渐区分为白帽、灰帽、黑帽等。
如果是想利用学到的技术非法牟利,奉劝尽早放弃。 君子爱财取之有道,想成为一名合格的白帽黑客,必须遵守法律底线和'江湖规矩',坚持合法合规的安全测试原则。

早期的互联网非常单调,一般只有静态页面。现在,随着技术的发展,Web 上大多数站点实际上是 Web 应用程序,在服务器和浏览器之间进行双向的信息传递。它们支持注册登录、金融交易、搜索及用户创作的内容。用户只需要拥有一个浏览器,就能实现各种功能。
Web 是指一个网站的前端页面到后端服务,比如我们常见的 JavaScript、PHP、Python、MySQL、jQuery、Docker 等,包括开发、运维这些服务。
所以 Web 安全也就是从安全的角度探索 Web 的一种方式。为了能够更简单地理解一些常见漏洞,我们需要先了解数据的传输过程。
浏览器即客户端,提供客户端和服务器端的数据信息交互。它负责渲染 HTML/CSS/JS,并向服务器发送 HTTP 请求。
客户端与 Web 服务器进行交互时就存在 Web 请求,这种请求都基于统一的应用层协议——HTTP 协议来交互数据。HTTP 属于轻量级协议,无需连接(无状态),提供了对通信错误的容错性。HTTPS 则在此基础上增加了 SSL/TLS 加密层。
中间件是位于平台(硬件和操作系统)和应用之间的通用服务。例如 Nginx、Apache 等反向代理服务器,或者 Redis、Kafka 等缓存消息队列服务,它们处理请求分发、负载均衡和数据缓冲。
Server 容器负责解析用户请求和脚本语言,类似的有 Tomcat、JBoss、Node.js 进程等。我们访问网页看到是 Web 容器处理后的内容。
动态页面可提供交互式的信息查询服务,主要依赖于 Web 数据库的实现,对外提供包含表单的 Web 页面作为访问接口,查询结果也以包含数据列表的 Web 页面形式返回给用户。
当然除了这些数据也有可能流向不可见的第三方服务商。
下图展示了数据的传输流程,以及不同阶段经常出现的漏洞及其原因:

我们常见的 Web 漏洞类型主要有 SQL 注入、XSS、远程命令执行以及越权等。以下分别用举例的形式为大家介绍这几种漏洞及其防御方法。
所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。
攻击原理: 当应用程序没有对用户输入进行过滤或参数化时,攻击者可以构造特殊的输入,改变原有 SQL 语句的逻辑。
示例:
假设有一个登录查询:SELECT * FROM users WHERE username = 'input_user' AND password = 'input_pass'
如果用户在用户名处输入 admin' --,查询变为:SELECT * FROM users WHERE username = 'admin' --' AND password = '...'
由于 -- 是 SQL 注释符,后面的密码验证被忽略,从而绕过登录。
防御措施:
XSS 则是攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页之时,嵌入 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。
类型:
示例:
如果在评论框中输入 <script>alert('hacked')</script>,且系统未转义直接显示,其他用户打开页面时会弹出警告框,甚至 Cookie 被窃取。
防御措施:
而远程命令执行,是用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致执行命令。
示例:
如果 PHP 代码使用了 system($_GET['cmd']),攻击者可以通过 ?cmd=ls -la 查看服务器文件列表,甚至写入后门。
防御措施:
eval、exec、system 等危险函数。越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户 A 通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改查的时候没有进行一个判断,判断所需要操作的信息是否属于对应的用户,可以导致用户 A 可以操作其他人的信息。
示例:
正常请求:GET /api/user/profile?id=1001
越权尝试:修改 ID 为 1002,若服务器未校验当前登录用户是否有权访问 1002 的数据,则获取他人隐私。
防御措施:

了解了这几个漏洞之后我们可以看到原理都有些类似,也很简单。当然我们只要不再局限于概念名词就会发现 Web 安全的大部分漏洞都很简单。更多时候,发现一个复杂的漏洞需要的是耐心。概念,不是一个神圣的东西,概念很多时候只是 bullshit。很多概念的产生是因为需要认识和概括某种存在着的现象而不得已产生的,概念也许是必须的但并不是必然如此的。
换句话说,概念仅可以被看做是一种努力尝试描述后的结果之一。或者也可以说概念是提出这个概念的人自嗨的产物,跟其他人关系不大。甚至,有些概念是'别有用心'的发明来合理化某种其实不必合理化但是存在的现象。
所以不要把自己拘泥于一个这样的概念中来思考所面临问题的实质。把概念忘了,你才可能看清楚你和事物本身的关系。
完全没有基础该从哪下手?完全没有基础学习 Web 安全是件比较难的事情,因为需要兼顾编程、网络、操作系统等多方面知识。建议如下:
这是一条坚持的道路,三分钟的热情劝君尽早放弃;多练多想,不要离开了教程什么都不会了,最好看完教程自己独立完成技术方面的开发。
网络安全是一场没有终点的马拉松。技术更新迭代极快,新的漏洞类型层出不穷。保持好奇心,培养严谨的逻辑思维,坚守法律底线,才能在安全领域走得更远。希望这份指南能为你开启 Web 安全的大门,祝你在探索技术的道路上不断精进。


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online